def get_yajl(version): yajl = backends.find_yajl_ctypes(version) yajl.yajl_alloc.restype = POINTER(c_char) yajl.yajl_get_error.restype = POINTER(c_char) return yajl
''' Wrapper for YAJL C library version 1.x. ''' from ctypes import Structure, c_uint, c_ubyte, c_int, c_long, c_double, c_char, \ c_void_p, c_char_p, CFUNCTYPE, POINTER, byref, string_at, cast from ijson import common, backends, utils from ijson.compat import b2s yajl = backends.find_yajl_ctypes(1) yajl.yajl_alloc.restype = POINTER(c_char) yajl.yajl_get_error.restype = POINTER(c_char) C_EMPTY = CFUNCTYPE(c_int, c_void_p) C_INT = CFUNCTYPE(c_int, c_void_p, c_int) C_LONG = CFUNCTYPE(c_int, c_void_p, c_long) C_DOUBLE = CFUNCTYPE(c_int, c_void_p, c_double) C_STR = CFUNCTYPE(c_int, c_void_p, POINTER(c_ubyte), c_uint) _callback_data = [ # Mapping of JSON parser events to callback C types and value converters. # Used to define the Callbacks structure and actual callback functions # inside the parse function. ('null', C_EMPTY, lambda: None), ('boolean', C_INT, lambda v: bool(v)), # "integer" and "double" aren't actually yielded by yajl since "number" # takes precedence if defined ('integer', C_LONG, lambda *_args: None), ('double', C_DOUBLE, lambda *_args: None),
''' Wrapper for YAJL C library version 1.x. ''' from ctypes import Structure, c_uint, c_ubyte, c_int, c_long, c_double, c_char, \ c_void_p, c_char_p, CFUNCTYPE, POINTER, byref, string_at, cast from ijson import common, backends from ijson.compat import b2s yajl = backends.find_yajl_ctypes(1) yajl.yajl_alloc.restype = POINTER(c_char) yajl.yajl_get_error.restype = POINTER(c_char) C_EMPTY = CFUNCTYPE(c_int, c_void_p) C_INT = CFUNCTYPE(c_int, c_void_p, c_int) C_LONG = CFUNCTYPE(c_int, c_void_p, c_long) C_DOUBLE = CFUNCTYPE(c_int, c_void_p, c_double) C_STR = CFUNCTYPE(c_int, c_void_p, POINTER(c_ubyte), c_uint) _callback_data = [ # Mapping of JSON parser events to callback C types and value converters. # Used to define the Callbacks structure and actual callback functions # inside the parse function. ('null', C_EMPTY, lambda: None), ('boolean', C_INT, lambda v: bool(v)), # "integer" and "double" aren't actually yielded by yajl since "number" # takes precedence if defined