1812
class _GCBuildDetails(object):
1813
"""A blob of data about the build details.
1815
This stores the minimal data, which then allows compatibility with the old
1816
api, without taking as much memory.
1819
__slots__ = ('_index', '_group_start', '_group_end', '_basis_end',
1820
'_delta_end', '_parents')
1823
compression_parent = None
1825
def __init__(self, parents, position_info):
1826
self._parents = parents
1827
(self._index, self._group_start, self._group_end, self._basis_end,
1828
self._delta_end) = position_info
1831
return '%s(%s, %s)' % (self.__class__.__name__,
1832
self.index_memo, self._parents)
1835
def index_memo(self):
1836
return (self._index, self._group_start, self._group_end,
1837
self._basis_end, self._delta_end)
1840
def record_details(self):
1841
return static_tuple.StaticTuple(self.method, None)
1843
def __getitem__(self, offset):
1844
"""Compatibility thunk to act like a tuple."""
1846
return self.index_memo
1848
return self.compression_parent # Always None
1850
return self._parents
1852
return self.record_details
1854
raise IndexError('offset out of range')
1860
1812
class _GCGraphIndex(object):
1861
1813
"""Mapper from GroupCompressVersionedFiles needs into GraphIndex storage."""
2059
2011
parents = entry[3][0]
2060
details = _GCBuildDetails(parents, self._node_to_position(entry))
2061
result[key] = details
2013
result[key] = (self._node_to_position(entry),
2014
None, parents, (method, None))
2064
2017
def keys(self):
2080
2033
# each, or about 7MB. Note that it might be even more when you consider
2081
2034
# how PyInt is allocated in separate slabs. And you can't return a slab
2082
2035
# to the OS if even 1 int on it is in use. Note though that Python uses
2083
# a LIFO when re-using PyInt slots, which might cause more
2036
# a LIFO when re-using PyInt slots, which probably causes more
2084
2037
# fragmentation.
2085
2038
start = int(bits[0])
2086
2039
start = self._int_cache.setdefault(start, start)