[PATCH 02 of 12] Add overlay index and map for use with overlay revlogs

Alexis S. L. Carvalho alexis at cecm.usp.br
Wed Jan 3 16:24:46 CST 2007


Thus spake Brendan Cully:
> diff --git a/mercurial/revlog.py b/mercurial/revlog.py
> --- a/mercurial/revlog.py
> +++ b/mercurial/revlog.py
> @@ -244,6 +244,35 @@ class lazyindex(object):
>      def append(self, e):
>          self.p.index.append(e)
>  
> +class overlayindex(object):
> +    "partial index with a parent"
> +    def __init__(self, index, parent, start):
> +        self.index = index
> +        self.parent = parent
> +        self.start = start
> +    def __len__(self):
> +        return self.start + len(self.index)
> +    def __getitem__(self, i):
> +        if i < self.start:
> +            return self.parent[i]
> +        return self.index[self._offset(i)]
> +    def __setitem__(self, i, val):
> +        if i < self.start:
> +            self.parent[i] = val
> +        else:
> +            self.index[self._offset(i)] = val
> +    def __delitem__(self, i):
> +        if i < self.start:
> +            del self.parent[i]
> +        else:
> +            del self.index[self._offset(i)]
> +    def _offset(self, i):
> +        if isinstance(i, slice):
> +            return slice(i.start - self.start, i.step, i.stop)
> +        return i - self.start

Do we use slices anywhere right now?  If so, things are probably buggy,
since comparing an int and a slice is not very meaningful:

>>> 0 < slice(3, 4)
True
>>> 42 < slice(3, 4)
True

Alexis


More information about the Mercurial-devel mailing list