summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2013-12-16 16:14:56 -0800
committerLamont Granquist <lamont@scriptkiddie.org>2013-12-16 16:14:56 -0800
commit6aa65ed7c16f9dc43835916cdabebae2085f0e62 (patch)
tree38e0faffcb3f2492b7992ab6cf6f5374c9323909
parent47037d045b5fd5c09992e07d66e8bb8d71d9c150 (diff)
downloadffi-yajl-6aa65ed7c16f9dc43835916cdabebae2085f0e62.tar.gz
code rearrangement
-rw-r--r--lib/ffi_yajl.rb113
-rw-r--r--lib/ffi_yajl/encoder.rb12
-rw-r--r--lib/ffi_yajl/ext.rb3
-rw-r--r--lib/ffi_yajl/ffi.rb119
-rw-r--r--lib/ffi_yajl/ffi/encoder.rb3
-rw-r--r--lib/ffi_yajl/parser.rb11
6 files changed, 133 insertions, 128 deletions
diff --git a/lib/ffi_yajl.rb b/lib/ffi_yajl.rb
index d5827bc..0f906b6 100644
--- a/lib/ffi_yajl.rb
+++ b/lib/ffi_yajl.rb
@@ -1,5 +1,4 @@
require 'rubygems'
-require 'ffi'
require 'ffi_yajl/encoder'
require 'ffi_yajl/parser'
@@ -9,115 +8,3 @@ module FFI_Yajl
class EncodeError < StandardError; end
end
-module FFI_Yajl
- extend ::FFI::Library
-
- libname = ::FFI.map_library_name("yajl")
- libpath = File.join(File.dirname(__FILE__), libname)
-
- if File.file?(libpath)
- # use our vendored version of libyajl2 if we find it installed
- ffi_lib libpath
- else
- ffi_lib 'yajl'
- end
-
- class YajlCallbacks < ::FFI::Struct
- layout :yajl_null, :pointer,
- :yajl_boolean, :pointer,
- :yajl_integer, :pointer,
- :yajl_double, :pointer,
- :yajl_number, :pointer,
- :yajl_string, :pointer,
- :yajl_start_map, :pointer,
- :yajl_map_key, :pointer,
- :yajl_end_map, :pointer,
- :yajl_start_array, :pointer,
- :yajl_end_array, :pointer
- end
-
- enum :yajl_status, [
- :yajl_status_ok,
- :yajl_status_client_canceled,
- :yajl_status_insufficient_data,
- :yajl_status_error,
- ]
-
-# FFI::Enums are slow, should remove the rest
-# enum :yajl_gen_status, [
-# :yajl_gen_status_ok,
-# :yajl_gen_keys_must_be_strings,
-# :yajl_max_depth_exceeded,
-# :yajl_gen_in_error_state,
-# :yajl_gen_generation_complete,
-# :yajl_gen_invalid_number,
-# :yajl_gen_no_buf,
-# ]
-
- enum :yajl_option, [
- :yajl_allow_comments, 0x01,
- :yajl_dont_validate_strings, 0x02,
- :yajl_allow_trailing_garbage, 0x04,
- :yajl_allow_multiple_values, 0x08,
- :yajl_allow_partial_values, 0x10,
- ]
-
- enum :yajl_gen_option, [
- :yajl_gen_beautify, 0x01,
- :yajl_gen_indent_string, 0x02,
- :yajl_gen_print_callback, 0x04,
- :yajl_gen_validate_utf8, 0x08,
- ]
-
- typedef :pointer, :yajl_handle
- typedef :pointer, :yajl_gen
-
- # yajl uses unsinged char *'s consistently
- typedef :pointer, :ustring_pointer
- typedef :string, :ustring
-
- # const char *yajl_status_to_string (yajl_status code)
- attach_function :yajl_status_to_string, [ :yajl_status ], :string
- # yajl_handle yajl_alloc(const yajl_callbacks * callbacks, yajl_alloc_funcs * afs, void * ctx)
- attach_function :yajl_alloc, [:pointer, :pointer, :pointer], :yajl_handle
- # void yajl_free (yajl_handle handle)
- attach_function :yajl_free, [:yajl_handle], :void
- # yajl_status yajl_parse (yajl_handle hand, const unsigned char *jsonText, unsigned int jsonTextLength)
- attach_function :yajl_parse, [:yajl_handle, :ustring, :uint], :yajl_status
- # yajl_status yajl_parse_complete (yajl_handle hand)
- attach_function :yajl_complete_parse, [:yajl_handle], :yajl_status
- # unsigned char *yajl_get_error (yajl_handle hand, int verbose, const unsigned char *jsonText, unsigned int jsonTextLength)
- attach_function :yajl_get_error, [:yajl_handle, :int, :ustring, :int], :ustring
- # void yajl_free_error (yajl_handle hand, unsigned char *str)
- attach_function :yajl_free_error, [:yajl_handle, :ustring], :void
-
- #
- attach_function :yajl_config, [:yajl_handle, :yajl_option, :int], :int
-
- attach_function :yajl_gen_config, [:yajl_gen, :yajl_gen_option, :varargs], :int
-
- # yajl_gen yajl_gen_alloc (const yajl_alloc_funcs *allocFuncs)
- attach_function :yajl_gen_alloc, [:pointer], :yajl_gen
- # yajl_gen yajl_gen_alloc2 (const yajl_print_t callback, const yajl_gen_config *config, const yajl_alloc_funcs *allocFuncs, void *ctx)
- # attach_function :yajl_gen_alloc2, [:pointer, :pointer, :pointer, :pointer], :yajl_gen
- # void yajl_gen_free (yajl_gen handle)
- attach_function :yajl_gen_free, [:yajl_gen], :void
-
- attach_function :yajl_gen_integer, [:yajl_gen, :long_long], :int
- attach_function :yajl_gen_double, [:yajl_gen, :double], :int
- attach_function :yajl_gen_number, [:yajl_gen, :ustring, :int], :int
- attach_function :yajl_gen_string, [:yajl_gen, :ustring, :int], :int
- attach_function :yajl_gen_null, [:yajl_gen], :int
- attach_function :yajl_gen_bool, [:yajl_gen, :int], :int
- attach_function :yajl_gen_map_open, [:yajl_gen], :int
- attach_function :yajl_gen_map_close, [:yajl_gen], :int
- attach_function :yajl_gen_array_open, [:yajl_gen], :int
- attach_function :yajl_gen_array_close, [:yajl_gen], :int
- # yajl_gen_status yajl_gen_get_buf (yajl_gen hand, const unsigned char **buf, unsigned int *len)
- attach_function :yajl_gen_get_buf, [:yajl_gen, :pointer ,:pointer], :int
- # void yajl_gen_clear (yajl_gen hand)
- attach_function :yajl_gen_clear, [:yajl_gen], :void
-
-
-end
-
diff --git a/lib/ffi_yajl/encoder.rb b/lib/ffi_yajl/encoder.rb
index d720187..ea6c1d7 100644
--- a/lib/ffi_yajl/encoder.rb
+++ b/lib/ffi_yajl/encoder.rb
@@ -48,18 +48,22 @@ module FFI_Yajl
end
end
- if ENV['FORCE_FFI_YAJL'] == "ffi" || defined?(Yajl)
+ if ENV['FORCE_FFI_YAJL'] == "ext"
+ require 'ffi_yajl/ext/encoder'
+ include FFI_Yajl::Ext::Encoder
+ elsif ENV['FORCE_FFI_YAJL'] == "ffi" || defined?(Yajl)
# on Linux yajl-ruby and non-FFI ffi_yajl conflict
- require 'ffi_yajl/ffi'
+ require 'ffi_yajl/ffi/encoder'
include FFI_Yajl::FFI::Encoder
else
begin
- require 'ffi_yajl/ext'
+ require 'ffi_yajl/ext/encoder'
include FFI_Yajl::Ext::Encoder
rescue LoadError
- require 'ffi_yajl/ffi'
+ require 'ffi_yajl/ffi/encoder'
include FFI_Yajl::FFI::Encoder
end
end
+
end
end
diff --git a/lib/ffi_yajl/ext.rb b/lib/ffi_yajl/ext.rb
deleted file mode 100644
index 94571df..0000000
--- a/lib/ffi_yajl/ext.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'ffi_yajl/ext/encoder'
-require 'ffi_yajl/ext/parser'
-
diff --git a/lib/ffi_yajl/ffi.rb b/lib/ffi_yajl/ffi.rb
index 6e35a63..5940a27 100644
--- a/lib/ffi_yajl/ffi.rb
+++ b/lib/ffi_yajl/ffi.rb
@@ -1,2 +1,117 @@
-require 'ffi_yajl/ffi/encoder'
-require 'ffi_yajl/ffi/parser'
+
+
+require 'ffi'
+
+# FIXME move to FFI_Yajl::FFI
+module FFI_Yajl
+ extend ::FFI::Library
+
+ libname = ::FFI.map_library_name("yajl")
+ libpath = File.expand_path(File.join(File.dirname(__FILE__), "..", libname))
+
+ if File.file?(libpath)
+ # use our vendored version of libyajl2 if we find it installed
+ ffi_lib libpath
+ else
+ ffi_lib 'yajl'
+ end
+
+ class YajlCallbacks < ::FFI::Struct
+ layout :yajl_null, :pointer,
+ :yajl_boolean, :pointer,
+ :yajl_integer, :pointer,
+ :yajl_double, :pointer,
+ :yajl_number, :pointer,
+ :yajl_string, :pointer,
+ :yajl_start_map, :pointer,
+ :yajl_map_key, :pointer,
+ :yajl_end_map, :pointer,
+ :yajl_start_array, :pointer,
+ :yajl_end_array, :pointer
+ end
+
+ enum :yajl_status, [
+ :yajl_status_ok,
+ :yajl_status_client_canceled,
+ :yajl_status_insufficient_data,
+ :yajl_status_error,
+ ]
+
+# FFI::Enums are slow, should remove the rest
+# enum :yajl_gen_status, [
+# :yajl_gen_status_ok,
+# :yajl_gen_keys_must_be_strings,
+# :yajl_max_depth_exceeded,
+# :yajl_gen_in_error_state,
+# :yajl_gen_generation_complete,
+# :yajl_gen_invalid_number,
+# :yajl_gen_no_buf,
+# ]
+
+ enum :yajl_option, [
+ :yajl_allow_comments, 0x01,
+ :yajl_dont_validate_strings, 0x02,
+ :yajl_allow_trailing_garbage, 0x04,
+ :yajl_allow_multiple_values, 0x08,
+ :yajl_allow_partial_values, 0x10,
+ ]
+
+ enum :yajl_gen_option, [
+ :yajl_gen_beautify, 0x01,
+ :yajl_gen_indent_string, 0x02,
+ :yajl_gen_print_callback, 0x04,
+ :yajl_gen_validate_utf8, 0x08,
+ ]
+
+ typedef :pointer, :yajl_handle
+ typedef :pointer, :yajl_gen
+
+ # yajl uses unsinged char *'s consistently
+ typedef :pointer, :ustring_pointer
+ typedef :string, :ustring
+
+ # const char *yajl_status_to_string (yajl_status code)
+ attach_function :yajl_status_to_string, [ :yajl_status ], :string
+ # yajl_handle yajl_alloc(const yajl_callbacks * callbacks, yajl_alloc_funcs * afs, void * ctx)
+ attach_function :yajl_alloc, [:pointer, :pointer, :pointer], :yajl_handle
+ # void yajl_free (yajl_handle handle)
+ attach_function :yajl_free, [:yajl_handle], :void
+ # yajl_status yajl_parse (yajl_handle hand, const unsigned char *jsonText, unsigned int jsonTextLength)
+ attach_function :yajl_parse, [:yajl_handle, :ustring, :uint], :yajl_status
+ # yajl_status yajl_parse_complete (yajl_handle hand)
+ attach_function :yajl_complete_parse, [:yajl_handle], :yajl_status
+ # unsigned char *yajl_get_error (yajl_handle hand, int verbose, const unsigned char *jsonText, unsigned int jsonTextLength)
+ attach_function :yajl_get_error, [:yajl_handle, :int, :ustring, :int], :ustring
+ # void yajl_free_error (yajl_handle hand, unsigned char *str)
+ attach_function :yajl_free_error, [:yajl_handle, :ustring], :void
+
+ #
+ attach_function :yajl_config, [:yajl_handle, :yajl_option, :int], :int
+
+ attach_function :yajl_gen_config, [:yajl_gen, :yajl_gen_option, :varargs], :int
+
+ # yajl_gen yajl_gen_alloc (const yajl_alloc_funcs *allocFuncs)
+ attach_function :yajl_gen_alloc, [:pointer], :yajl_gen
+ # yajl_gen yajl_gen_alloc2 (const yajl_print_t callback, const yajl_gen_config *config, const yajl_alloc_funcs *allocFuncs, void *ctx)
+ # attach_function :yajl_gen_alloc2, [:pointer, :pointer, :pointer, :pointer], :yajl_gen
+ # void yajl_gen_free (yajl_gen handle)
+ attach_function :yajl_gen_free, [:yajl_gen], :void
+
+ attach_function :yajl_gen_integer, [:yajl_gen, :long_long], :int
+ attach_function :yajl_gen_double, [:yajl_gen, :double], :int
+ attach_function :yajl_gen_number, [:yajl_gen, :ustring, :int], :int
+ attach_function :yajl_gen_string, [:yajl_gen, :ustring, :int], :int
+ attach_function :yajl_gen_null, [:yajl_gen], :int
+ attach_function :yajl_gen_bool, [:yajl_gen, :int], :int
+ attach_function :yajl_gen_map_open, [:yajl_gen], :int
+ attach_function :yajl_gen_map_close, [:yajl_gen], :int
+ attach_function :yajl_gen_array_open, [:yajl_gen], :int
+ attach_function :yajl_gen_array_close, [:yajl_gen], :int
+ # yajl_gen_status yajl_gen_get_buf (yajl_gen hand, const unsigned char **buf, unsigned int *len)
+ attach_function :yajl_gen_get_buf, [:yajl_gen, :pointer ,:pointer], :int
+ # void yajl_gen_clear (yajl_gen hand)
+ attach_function :yajl_gen_clear, [:yajl_gen], :void
+
+
+end
+
diff --git a/lib/ffi_yajl/ffi/encoder.rb b/lib/ffi_yajl/ffi/encoder.rb
index f6aa122..13fd7fb 100644
--- a/lib/ffi_yajl/ffi/encoder.rb
+++ b/lib/ffi_yajl/ffi/encoder.rb
@@ -1,6 +1,5 @@
-require 'ffi'
-# FIXME: should require the lower level ffi stuff here instead of having this included higher up
+require 'ffi_yajl/ffi'
module FFI_Yajl
module FFI
diff --git a/lib/ffi_yajl/parser.rb b/lib/ffi_yajl/parser.rb
index 25acd3a..33bb2c3 100644
--- a/lib/ffi_yajl/parser.rb
+++ b/lib/ffi_yajl/parser.rb
@@ -19,16 +19,19 @@ module FFI_Yajl
do_yajl_parse(str, yajl_opts)
end
- if ENV['FORCE_FFI_YAJL'] == "ffi" || defined?(Yajl)
+ if ENV['FORCE_FFI_YAJL'] == "ext"
+ require 'ffi_yajl/ext/parser'
+ include FFI_Yajl::Ext::Parser
+ elsif ENV['FORCE_FFI_YAJL'] == "ffi" || defined?(Yajl)
# on Linux yajl-ruby and non-FFI ffi_yajl conflict
- require 'ffi_yajl/ffi'
+ require 'ffi_yajl/ffi/parser'
include FFI_Yajl::FFI::Parser
else
begin
- require 'ffi_yajl/ext'
+ require 'ffi_yajl/ext/parser'
include FFI_Yajl::Ext::Parser
rescue LoadError
- require 'ffi_yajl/ffi'
+ require 'ffi_yajl/ffi/parser'
include FFI_Yajl::FFI::Parser
end
end