37 def offset_type(offset, type): |
37 def offset_type(offset, type): |
38 return int(int(offset) << 16 | type) |
38 return int(int(offset) << 16 | type) |
39 |
39 |
40 class BaseIndexObject(object): |
40 class BaseIndexObject(object): |
41 def __len__(self): |
41 def __len__(self): |
42 return self._lgt + len(self._extra) + 1 |
42 return self._lgt + len(self._extra) |
43 |
43 |
44 def append(self, tup): |
44 def append(self, tup): |
45 self._extra.append(tup) |
45 self._extra.append(tup) |
46 |
46 |
47 def _fix_index(self, i): |
47 def _fix_index(self, i): |
48 if not isinstance(i, int): |
48 if not isinstance(i, int): |
49 raise TypeError("expecting int indexes") |
49 raise TypeError("expecting int indexes") |
50 if i < 0 or i >= len(self): |
50 if i < 0 or i >= len(self) + 1: |
51 raise IndexError |
51 raise IndexError |
52 return i |
52 return i |
53 |
53 |
54 def __getitem__(self, i): |
54 def __getitem__(self, i): |
55 if i == -1 or i == len(self) - 1: |
55 if i == -1 or i == len(self): |
56 return (0, 0, 0, -1, -1, -1, -1, nullid) |
56 return (0, 0, 0, -1, -1, -1, -1, nullid) |
57 i = self._fix_index(i) |
57 i = self._fix_index(i) |
58 if i >= self._lgt: |
58 if i >= self._lgt: |
59 return self._extra[i - self._lgt] |
59 return self._extra[i - self._lgt] |
60 index = self._calculate_index(i) |
60 index = self._calculate_index(i) |