Exemplo n.º 1
0
def HAYSTACK_POINTER(cls):
  # check cls as ctypes obj
  if cls is None: # VOID
    cls = type(None)# ctypes.c_void_p # ctypes.c_ulong
    clsname = 'c_void'
  else:
    fake_ptr_base_type = Config.WORDTYPE # 4 or 8 len
    # create object that is a pointer ( see model.isPointer )
    clsname = cls.__name__
  import _ctypes
  klass = type('haystack.model.LP_%d_%s'%(Config.WORDSIZE, clsname),( _ctypes._SimpleCData,),{'_type_': Config.get_word_type_char(), '_subtype_': cls, '_sub_addr_': lambda x: x.value, '__repr__': lambda x: '%s(%d)'%(clsname,x.value)}) #, '__str__': lambda x: str(x.value)
  #klass = type('haystack.model.LP_%d_%s'%(Config.WORDSIZE, clsname),( Config.WORDTYPE,),{'_subtype_': cls, '_sub_addr_': lambda x: x.value, '__repr__': lambda x: '%s(%d)'%(clsname,x.value)}) #, '__str__': lambda x: str(x.value)
  klass._sub_addr_ = property(klass._sub_addr_)
  return klass