class BoolConverter(ffitypes.typeid(bool), TypeConverter): def convert_argument(self, space, w_obj, address, call_local): x = rffi.cast(rffi.LONGP, address) x[0] = self._unwrap_object(space, w_obj) ba = rffi.cast(rffi.CCHARP, address) ba[capi.c_function_arg_typeoffset(space)] = 'b' def convert_argument_libffi(self, space, w_obj, address, call_local): x = rffi.cast(rffi.LONGP, address) x[0] = self._unwrap_object(space, w_obj) def from_memory(self, space, w_obj, w_pycppclass, offset): address = rffi.cast(rffi.CCHARP, self._get_raw_address(space, w_obj, offset)) if address[0] == '\x01': return space.w_True return space.w_False def to_memory(self, space, w_obj, w_value, offset): address = rffi.cast(rffi.CCHARP, self._get_raw_address(space, w_obj, offset)) arg = self._unwrap_object(space, w_value) if arg: address[0] = '\x01' else: address[0] = '\x00'
class BasicConverter(ffitypes.typeid(c_type), IntTypeConverterMixin, TypeConverter): _immutable_ = True typecode = c_tc def __init__(self, space, default): self.default = rffi.cast(self.c_type, capi.c_strtoull(space, default))
class BasicConverter(ffitypes.typeid(c_type), CharTypeConverterMixin, TypeConverter): _immutable_ = True def __init__(self, space, default): self.valid_default = False try: self.default = rffi.cast(self.c_type, capi.c_strtoull(space, default)) self.valid_default = True except Exception: self.default = rffi.cast(self.c_type, 0)
class LongDoubleConverter(ffitypes.typeid(rffi.LONGDOUBLE), FloatTypeConverterMixin, TypeConverter): _immutable_fields_ = ['default'] def __init__(self, space, default): if default: fval = float(rfloat.rstring_to_float(default)) else: fval = float(0.) self.default = r_longfloat(fval)
class DoubleConverter(ffitypes.typeid(rffi.DOUBLE), FloatTypeConverterMixin, TypeConverter): _immutable_fields_ = ['default'] def __init__(self, space, default): if default: self.default = rffi.cast(self.c_type, rfloat.rstring_to_float(default)) else: self.default = rffi.cast(self.c_type, 0.)
class DoubleConverter(ffitypes.typeid(rffi.DOUBLE), FloatTypeConverterMixin, TypeConverter): _immutable_fields_ = ['default', 'valid_default'] def __init__(self, space, default): self.valid_default = False try: self.default = rffi.cast(self.c_type, rfloat.rstring_to_float(default)) self.valid_default = True except Exception: self.default = rffi.cast(self.c_type, 0.)
class BasicConverter(ffitypes.typeid(c_type), IntTypeConverterMixin, TypeConverter): _immutable_ = True typecode = c_tc def __init__(self, space, default): self.valid_default = False try: self.default = rffi.cast(self.c_type, dfc(space, default)) self.valid_default = True except Exception: self.default = rffi.cast(self.c_type, 0)
class FloatConverter(ffitypes.typeid(rffi.FLOAT), FloatTypeConverterMixin, TypeConverter): _immutable_fields_ = ['default'] def __init__(self, space, default): if default: fval = float(rfloat.rstring_to_float(default)) else: fval = float(0.) self.default = r_singlefloat(fval) def from_memory(self, space, w_obj, w_pycppclass, offset): address = self._get_raw_address(space, w_obj, offset) rffiptr = rffi.cast(self.c_ptrtype, address) return self._wrap_object(space, rffiptr[0])
class FloatConverter(ffitypes.typeid(rffi.FLOAT), FloatTypeConverterMixin, TypeConverter): _immutable_fields_ = ['default', 'valid_default'] def __init__(self, space, default): self.valid_default = False try: fval = float(rfloat.rstring_to_float(default)) self.valid_default = True except Exception: fval = float(0.) self.default = rffi.cast(rffi.FLOAT, r_singlefloat(fval)) def from_memory(self, space, w_obj, offset): address = self._get_raw_address(space, w_obj, offset) rffiptr = rffi.cast(self.c_ptrtype, address) return self._wrap_object(space, rffiptr[0])
class CharConverter(ffitypes.typeid(rffi.CHAR), TypeConverter): def convert_argument(self, space, w_obj, address): x = rffi.cast(rffi.CCHARP, address) x[0] = self._unwrap_object(space, w_obj) ba = rffi.cast(rffi.CCHARP, address) ba[capi.c_function_arg_typeoffset(space)] = 'b' def convert_argument_libffi(self, space, w_obj, address, scratch): x = rffi.cast(self.c_ptrtype, address) x[0] = self._unwrap_object(space, w_obj) def from_memory(self, space, w_obj, offset): address = rffi.cast(rffi.CCHARP, self._get_raw_address(space, w_obj, offset)) return space.newbytes(address[0]) def to_memory(self, space, w_obj, w_value, offset): address = rffi.cast(rffi.CCHARP, self._get_raw_address(space, w_obj, offset)) address[0] = self._unwrap_object(space, w_value)
class LongDoubleRefExecutor(ffitypes.typeid(rffi.LONGDOUBLE), LongDoubleRefExecutorMixin, Executor): def cffi_type(self, space): state = space.fromcache(ffitypes.State) return state.c_voidp
class LongDoubleExecutor(ffitypes.typeid(rffi.LONGDOUBLE), LongDoubleExecutorMixin, Executor): _immutable_ = True c_stubcall = staticmethod(capi.c_call_ld)
class Char16Executor(ffitypes.typeid(ffitypes.CHAR16_T), CharNExecutor, Executor): pass
class UCharConverter(ffitypes.typeid(rffi.UCHAR), CharConverter): pass
class Char32Executor(ffitypes.typeid(ffitypes.CHAR32_T), CharNExecutor, Executor): pass
class BasicExecutor(ffitypes.typeid(c_type), NumericExecutorMixin, FunctionExecutor): _immutable_ = True c_stubcall = staticmethod(stub)
class BasicRefExecutor(ffitypes.typeid(c_type), NumericRefExecutorMixin, FunctionExecutor): def cffi_type(self, space): state = space.fromcache(ffitypes.State) return state.c_voidp
class WCharExecutor(ffitypes.typeid(lltype.UniChar), CharNExecutor, Executor): pass