42 return self._lgt + len(self._extra) |
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 _check_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): |
51 raise IndexError |
51 raise IndexError |
52 return i |
|
53 |
52 |
54 def __getitem__(self, i): |
53 def __getitem__(self, i): |
55 if i == -1: |
54 if i == -1: |
56 return (0, 0, 0, -1, -1, -1, -1, nullid) |
55 return (0, 0, 0, -1, -1, -1, -1, nullid) |
57 i = self._fix_index(i) |
56 self._check_index(i) |
58 if i >= self._lgt: |
57 if i >= self._lgt: |
59 return self._extra[i - self._lgt] |
58 return self._extra[i - self._lgt] |
60 index = self._calculate_index(i) |
59 index = self._calculate_index(i) |
61 r = struct.unpack(indexformatng, self._data[index:index + indexsize]) |
60 r = struct.unpack(indexformatng, self._data[index:index + indexsize]) |
62 if i == 0: |
61 if i == 0: |
77 return i * indexsize |
76 return i * indexsize |
78 |
77 |
79 def __delitem__(self, i): |
78 def __delitem__(self, i): |
80 if not isinstance(i, slice) or not i.stop == -1 or i.step is not None: |
79 if not isinstance(i, slice) or not i.stop == -1 or i.step is not None: |
81 raise ValueError("deleting slices only supports a:-1 with step 1") |
80 raise ValueError("deleting slices only supports a:-1 with step 1") |
82 i = self._fix_index(i.start) |
81 i = i.start |
|
82 self._check_index(i) |
83 if i < self._lgt: |
83 if i < self._lgt: |
84 self._data = self._data[:i * indexsize] |
84 self._data = self._data[:i * indexsize] |
85 self._lgt = i |
85 self._lgt = i |
86 self._extra = [] |
86 self._extra = [] |
87 else: |
87 else: |
111 return count |
111 return count |
112 |
112 |
113 def __delitem__(self, i): |
113 def __delitem__(self, i): |
114 if not isinstance(i, slice) or not i.stop == -1 or i.step is not None: |
114 if not isinstance(i, slice) or not i.stop == -1 or i.step is not None: |
115 raise ValueError("deleting slices only supports a:-1 with step 1") |
115 raise ValueError("deleting slices only supports a:-1 with step 1") |
116 i = self._fix_index(i.start) |
116 i = i.start |
|
117 self._check_index(i) |
117 if i < self._lgt: |
118 if i < self._lgt: |
118 self._offsets = self._offsets[:i] |
119 self._offsets = self._offsets[:i] |
119 self._lgt = i |
120 self._lgt = i |
120 self._extra = [] |
121 self._extra = [] |
121 else: |
122 else: |