Beispiel #1
0
    def __new__(self, name, cls, typedict):
        res = type.__new__(self, name, cls, typedict)
        if '_fields_' in typedict:
            res._names, rawfields, res._fieldtypes = names_and_fields(
                typedict['_fields_'], cls[0], True,
                typedict.get('_anonymous_', None))
            res._ffishape = (res._sizeofinstances(),
                             res._alignmentofinstances())
            res._ffiargshape = res._ffishape
            # we need to create an array of size one for each
            # of our elements
            res._ffiarrays = {}
            for name, field in res._fieldtypes.iteritems():
                res._ffiarrays[name] = _rawffi.Array(field.ctype._ffishape)

        def __init__(self):  # don't allow arguments by now
            if not hasattr(self, '_ffiarrays'):
                raise TypeError("Cannot instantiate union, has no type")
            # malloc size
            size = self.__class__._sizeofinstances()
            self.__dict__['_buffer'] = _rawffi.Array('c')(size)
            self.__dict__['_needs_free'] = True

        res.__init__ = __init__
        return res
Beispiel #2
0
 def __setattr__(self, name, value):
     if name == '_fields_':
         if self.__dict__.get('_fields_', None):
             raise AttributeError("_fields_ is final")
         if self in [v for k, v in value]:
             raise AttributeError("Union cannot contain itself")
         self._names, rawfields, self._fieldtypes = names_and_fields(
             value, self.__bases__[0], True,
             self.__dict__.get('_anonymous_', None))
         _CDataMeta.__setattr__(self, '_fields_', value)
         _set_shape(self)
     _CDataMeta.__setattr__(self, name, value)
Beispiel #3
0
 def __setattr__(self, name, value):
     if name == '_fields_':
         if self.__dict__.get('_fields_', None):
             raise AttributeError("_fields_ is final")
         if self in [v for k, v in value]:
             raise AttributeError("Union cannot contain itself")
         self._names, rawfields, self._fieldtypes = names_and_fields(
             value, self.__bases__[0], True,
             self.__dict__.get('_anonymous_', None))
         _CDataMeta.__setattr__(self, '_fields_', value)
         _set_shape(self)
     _CDataMeta.__setattr__(self, name, value)
Beispiel #4
0
 def __setattr__(self, name, value):
     if name == '_fields_':
         if self.__dict__.get('_fields_', None):
             raise AttributeError("_fields_ is final")
         if self in [v for k, v in value]:
             raise AttributeError("Union cannot contain itself")
         self._names, rawfields, self._fieldtypes = names_and_fields(
             value, self.__bases__[0], True,
             self.__dict__.get('_anonymous_', None))
         self._ffiarrays = {}
         for name, field in self._fieldtypes.iteritems():
             self._ffiarrays[name] = _rawffi.Array(field.ctype._ffishape)
         _CDataMeta.__setattr__(self, '_fields_', value)
         self._ffiargshape = self._ffishape = (self._sizeofinstances(),
                                               self._alignmentofinstances())
         return
     _CDataMeta.__setattr__(self, name, value)
Beispiel #5
0
    def __new__(self, name, cls, typedict):
        res = type.__new__(self, name, cls, typedict)
        if '_fields_' in typedict:
            res._names, rawfields, res._fieldtypes = names_and_fields(
                typedict['_fields_'], cls[0], True,
                typedict.get('_anonymous_', None))
            _set_shape(res)

        def __init__(self): # don't allow arguments by now
            if not hasattr(self, '_ffiarrays'):
                raise TypeError("Cannot instantiate union, has no type")
            # malloc size
            size = self.__class__._sizeofinstances()
            self.__dict__['_objects'] = {}
            self.__dict__['_buffer'] = self._ffiopaque(autofree=True)
        res.__init__ = __init__
        return res
Beispiel #6
0
 def __setattr__(self, name, value):
     if name == '_fields_':
         if self.__dict__.get('_fields_', None):
             raise AttributeError("_fields_ is final")
         if self in [v for k, v in value]:
             raise AttributeError("Union cannot contain itself")
         self._names, rawfields, self._fieldtypes = names_and_fields(
             value, self.__bases__[0], True,
             self.__dict__.get('_anonymous_', None))
         self._ffiarrays = {}
         for name, field in self._fieldtypes.iteritems():
             self._ffiarrays[name] = _rawffi.Array(field.ctype._ffishape)
         _CDataMeta.__setattr__(self, '_fields_', value)
         self._ffiargshape = self._ffishape = (self._sizeofinstances(),
                                               self._alignmentofinstances())
         return
     _CDataMeta.__setattr__(self, name, value)
Beispiel #7
0
 def __new__(self, name, cls, typedict):
     res = type.__new__(self, name, cls, typedict)
     if '_fields_' in typedict:
         res._names, rawfields, res._fieldtypes = names_and_fields(
             typedict['_fields_'], cls[0], True,
             typedict.get('_anonymous_', None))
         res._ffishape = (res._sizeofinstances(),
                          res._alignmentofinstances())
         res._ffiargshape = res._ffishape
         # we need to create an array of size one for each
         # of our elements
         res._ffiarrays = {}
         for name, field in res._fieldtypes.iteritems():
             res._ffiarrays[name] = _rawffi.Array(field.ctype._ffishape)
     def __init__(self): # don't allow arguments by now
         if not hasattr(self, '_ffiarrays'):
             raise TypeError("Cannot instantiate union, has no type")
         # malloc size
         size = self.__class__._sizeofinstances()
         self.__dict__['_buffer'] = _rawffi.Array('c')(size)
         self.__dict__['_needs_free'] = True
     res.__init__ = __init__
     return res