Beispiel #1
0
 def _cdata_to_python_inner(data):
     type_ = typeof(data)
     kind = type_.kind
     if kind == 'primitive':
         return data
     elif kind == 'pointer':
         if data == ffi.NULL:
             return None
         else:
             if isinstance(data[0], ffi.CData):
                 return _cdata_to_python_inner(data[0])
             else:
                 return data[0]
     elif kind == 'struct':
         #d = {}
         d = OrderedDict()
         for name, field in type_.fields:
             kind = field.type.kind
             if kind == 'primitive':
                 d[name] = getattr(data, name)
             else:
                 d[name] = _cdata_to_python_inner(getattr(data, name))
         return d
     elif kind == 'array':
         item = type_.item
         if item.kind == 'primitive':
             if item.cname == 'char':
                 if encoding is None:
                     return ffi.string(data)
                 else:
                     return ffi.string(data).decode(encoding)
             else:
                 return [data[i] for i in range(type_.length)]
         else:
             return [_cdata_to_python_inner(data[i]) for i in range(type_.length)]
Beispiel #2
0
 def _array_to_list(data, item, length):
     if item.kind == 'primitive':
         if item.cname == 'char':
             if encoding is None:
                 return ffi.string(data)
             else:
                 return ffi.string(data).decode(encoding)
         else:
             return [data[i] for i in range(length)]
     else:
         return [cdata_to_python_ver2(data[i]) for i in range(length)]