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
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)
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)
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)
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
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)
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