162 lines · plain
1STRING_EXTENSION_OUTSIDE(SBData)2 3%extend lldb::SBData {4#ifdef SWIGPYTHON5 %pythoncode %{6 def __len__(self):7 return self.GetByteSize()8 9 class read_data_helper:10 def __init__(self, sbdata, readerfunc, item_size):11 self.sbdata = sbdata12 self.readerfunc = readerfunc13 self.item_size = item_size14 def __getitem__(self,key):15 if isinstance(key,slice):16 list = []17 for x in range(*key.indices(self.__len__())):18 list.append(self.__getitem__(x))19 return list20 if not (isinstance(key, int)):21 raise TypeError('must be int')22 key = key * self.item_size # SBData uses byte-based indexes, but we want to use itemsize-based indexes here23 error = SBError()24 my_data = self.readerfunc(self.sbdata,error,key)25 if error.Fail():26 raise IndexError(error.GetCString())27 else:28 return my_data29 def __len__(self):30 return int(self.sbdata.GetByteSize()/self.item_size)31 def all(self):32 return self[0:len(self)]33 34 @classmethod35 def CreateDataFromInt (cls, value, size = None, target = None, ptr_size = None, endian = None):36 import sys37 lldbmodule = sys.modules[cls.__module__]38 lldbdict = lldbmodule.__dict__39 if 'target' in lldbdict:40 lldbtarget = lldbdict['target']41 else:42 lldbtarget = None43 if target is None and lldbtarget is not None and lldbtarget.IsValid():44 target = lldbtarget45 if ptr_size is None:46 if target and target.IsValid():47 ptr_size = target.addr_size48 else:49 ptr_size = 850 if endian is None:51 if target and target.IsValid():52 endian = target.byte_order53 else:54 endian = lldbdict['eByteOrderLittle']55 if size is None:56 if value > 2147483647:57 size = 858 elif value < -2147483648:59 size = 860 elif value > 4294967295:61 size = 862 else:63 size = 464 if size == 4:65 if value < 0:66 return SBData().CreateDataFromSInt32Array(endian, ptr_size, [value])67 return SBData().CreateDataFromUInt32Array(endian, ptr_size, [value])68 if size == 8:69 if value < 0:70 return SBData().CreateDataFromSInt64Array(endian, ptr_size, [value])71 return SBData().CreateDataFromUInt64Array(endian, ptr_size, [value])72 return None73 74 def _make_helper(self, sbdata, getfunc, itemsize):75 return self.read_data_helper(sbdata, getfunc, itemsize)76 77 def _make_helper_uint8(self):78 return self._make_helper(self, SBData.GetUnsignedInt8, 1)79 80 def _make_helper_uint16(self):81 return self._make_helper(self, SBData.GetUnsignedInt16, 2)82 83 def _make_helper_uint32(self):84 return self._make_helper(self, SBData.GetUnsignedInt32, 4)85 86 def _make_helper_uint64(self):87 return self._make_helper(self, SBData.GetUnsignedInt64, 8)88 89 def _make_helper_sint8(self):90 return self._make_helper(self, SBData.GetSignedInt8, 1)91 92 def _make_helper_sint16(self):93 return self._make_helper(self, SBData.GetSignedInt16, 2)94 95 def _make_helper_sint32(self):96 return self._make_helper(self, SBData.GetSignedInt32, 4)97 98 def _make_helper_sint64(self):99 return self._make_helper(self, SBData.GetSignedInt64, 8)100 101 def _make_helper_float(self):102 return self._make_helper(self, SBData.GetFloat, 4)103 104 def _make_helper_double(self):105 return self._make_helper(self, SBData.GetDouble, 8)106 107 def _read_all_uint8(self):108 return self._make_helper_uint8().all()109 110 def _read_all_uint16(self):111 return self._make_helper_uint16().all()112 113 def _read_all_uint32(self):114 return self._make_helper_uint32().all()115 116 def _read_all_uint64(self):117 return self._make_helper_uint64().all()118 119 def _read_all_sint8(self):120 return self._make_helper_sint8().all()121 122 def _read_all_sint16(self):123 return self._make_helper_sint16().all()124 125 def _read_all_sint32(self):126 return self._make_helper_sint32().all()127 128 def _read_all_sint64(self):129 return self._make_helper_sint64().all()130 131 def _read_all_float(self):132 return self._make_helper_float().all()133 134 def _read_all_double(self):135 return self._make_helper_double().all()136 137 uint8 = property(_make_helper_uint8, None, doc='''A read only property that returns an array-like object out of which you can read uint8 values.''')138 uint16 = property(_make_helper_uint16, None, doc='''A read only property that returns an array-like object out of which you can read uint16 values.''')139 uint32 = property(_make_helper_uint32, None, doc='''A read only property that returns an array-like object out of which you can read uint32 values.''')140 uint64 = property(_make_helper_uint64, None, doc='''A read only property that returns an array-like object out of which you can read uint64 values.''')141 sint8 = property(_make_helper_sint8, None, doc='''A read only property that returns an array-like object out of which you can read sint8 values.''')142 sint16 = property(_make_helper_sint16, None, doc='''A read only property that returns an array-like object out of which you can read sint16 values.''')143 sint32 = property(_make_helper_sint32, None, doc='''A read only property that returns an array-like object out of which you can read sint32 values.''')144 sint64 = property(_make_helper_sint64, None, doc='''A read only property that returns an array-like object out of which you can read sint64 values.''')145 float = property(_make_helper_float, None, doc='''A read only property that returns an array-like object out of which you can read float values.''')146 double = property(_make_helper_double, None, doc='''A read only property that returns an array-like object out of which you can read double values.''')147 uint8s = property(_read_all_uint8, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint8 values.''')148 uint16s = property(_read_all_uint16, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint16 values.''')149 uint32s = property(_read_all_uint32, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint32 values.''')150 uint64s = property(_read_all_uint64, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint64 values.''')151 sint8s = property(_read_all_sint8, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint8 values.''')152 sint16s = property(_read_all_sint16, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint16 values.''')153 sint32s = property(_read_all_sint32, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint32 values.''')154 sint64s = property(_read_all_sint64, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint64 values.''')155 floats = property(_read_all_float, None, doc='''A read only property that returns an array with all the contents of this SBData represented as float values.''')156 doubles = property(_read_all_double, None, doc='''A read only property that returns an array with all the contents of this SBData represented as double values.''')157 byte_order = property(GetByteOrder, SetByteOrder, doc='''A read/write property getting and setting the endianness of this SBData (data.byte_order = lldb.eByteOrderLittle).''')158 size = property(GetByteSize, None, doc='''A read only property that returns the size the same result as GetByteSize().''')159 %}160#endif161}162