def __init__(self, space, w_vector): W_AbstractSeqIterObject.__init__(self, w_vector) # TODO: this should live in rpythonize.py or something so that the # imports can move to the top w/o getting circles from pypy.module._cppyy import interp_cppyy assert isinstance(w_vector, interp_cppyy.W_CPPInstance) vector = space.interp_w(interp_cppyy.W_CPPInstance, w_vector) self.overload = vector.cppclass.get_overload("__getitem__") from pypy.module._cppyy import capi v_type = capi.c_stdvector_valuetype(space, vector.cppclass.name) v_size = capi.c_stdvector_valuesize(space, vector.cppclass.name) if not v_type or not v_size: raise NotImplementedError # fallback on getitem w_arr = vector.cppclass.get_overload("data").call(w_vector, []) arr = space.interp_w(W_ArrayInstance, w_arr, can_be_None=True) if not arr: raise OperationError(space.w_StopIteration, space.w_None) self.data = rffi.cast(rffi.VOIDP, space.uint_w(arr.getbuffer(space))) from pypy.module._cppyy import converter self.converter = converter.get_converter(space, v_type, '') self.len = space.uint_w( vector.cppclass.get_overload("size").call(w_vector, [])) self.stride = v_size
def __init__(self, space, w_vector): W_AbstractSeqIterObject.__init__(self, w_vector) # TODO: this should live in rpythonize.py or something so that the # imports can move to the top w/o getting circles from pypy.module._cppyy import interp_cppyy assert isinstance(w_vector, interp_cppyy.W_CPPInstance) vector = space.interp_w(interp_cppyy.W_CPPInstance, w_vector) v_type = c_resolve_name(space, vector.clsdecl.name + '::value_type') v_size = c_size_of_type(space, v_type) if not v_type or not v_size: raise NotImplementedError # fallback on getitem from pypy.module._cppyy import converter self.converter = converter.get_converter(space, v_type, '') # this 'data' is from the decl, so not the pythonized data from pythonify.py w_arr = space.call_obj_args(vector.clsdecl.get_overload('data'), w_vector, Arguments(space, [])) arr = space.interp_w(W_ArrayInstance, w_arr, can_be_None=True) if not arr: raise OperationError(space.w_StopIteration, space.w_None) self.data = rffi.cast(rffi.CCHARP, space.uint_w(arr.getbuffer(space))) self.len = space.uint_w( space.call_obj_args(vector.clsdecl.get_overload('size'), w_vector, Arguments(space, []))) self.stride = v_size
def __init__(self, space, clsdecl, address, length, dimensions): from pypy.module._cppyy import converter name = clsdecl.name self.clssize = int(intmask(capi.c_size_of_klass(space, clsdecl))) if dimensions: name = name + '[' + dimensions[0] + ']' for num in dimensions: self.clssize *= int(num) dimensions = ':'.join(dimensions) self.converter = converter.get_converter(space, name, dimensions) self.baseaddress = address self.length = length