Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
 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