1STRING_EXTENSION_OUTSIDE(SBData)
2
3%extend lldb::SBData {
4#ifdef SWIGPYTHON
5    %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 = sbdata
12                self.readerfunc = readerfunc
13                self.item_size = item_size
14            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 list
20                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 here
23                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_data
29            def __len__(self):
30                return int(self.sbdata.GetByteSize()/self.item_size)
31            def all(self):
32                return self[0:len(self)]
33
34        @classmethod
35        def CreateDataFromInt (cls, value, size = None, target = None, ptr_size = None, endian = None):
36            import sys
37            lldbmodule = sys.modules[cls.__module__]
38            lldbdict = lldbmodule.__dict__
39            if 'target' in lldbdict:
40                lldbtarget = lldbdict['target']
41            else:
42                lldbtarget = None
43            if target == None and lldbtarget != None and lldbtarget.IsValid():
44                target = lldbtarget
45            if ptr_size == None:
46                if target and target.IsValid():
47                    ptr_size = target.addr_size
48                else:
49                    ptr_size = 8
50            if endian == None:
51                if target and target.IsValid():
52                    endian = target.byte_order
53                else:
54                    endian = lldbdict['eByteOrderLittle']
55            if size == None:
56                if value > 2147483647:
57                    size = 8
58                elif value < -2147483648:
59                    size = 8
60                elif value > 4294967295:
61                    size = 8
62                else:
63                    size = 4
64            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 None
73
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#endif
161}
162