Преглед изворни кода

hashindex: move common code to Mixin class

Thomas Waldmann пре 7 месеци
родитељ
комит
f59e0249be
1 измењених фајлова са 27 додато и 63 уклоњено
  1. 27 63
      src/borg/hashindex.pyx

+ 27 - 63
src/borg/hashindex.pyx

@@ -10,10 +10,34 @@ API_VERSION = '1.2_01'
 cdef _NoDefault = object()
 cdef _NoDefault = object()
 
 
 
 
+class HTProxyMixin:
+    def __setitem__(self, key, value):
+        self.ht[key] = value
+
+    def __getitem__(self, key):
+        return self.ht[key]
+
+    def __delitem__(self, key):
+        del self.ht[key]
+
+    def __contains__(self, key):
+        return key in self.ht
+
+    def __len__(self):
+        return len(self.ht)
+
+    def __iter__(self):
+        for key, value in self.ht.items():
+            yield key
+
+    def clear(self):
+        self.ht.clear()
+
+
 ChunkIndexEntry = namedtuple('ChunkIndexEntry', 'refcount size')
 ChunkIndexEntry = namedtuple('ChunkIndexEntry', 'refcount size')
 
 
 
 
-class ChunkIndex(MutableMapping):
+class ChunkIndex(HTProxyMixin, MutableMapping):
     """
     """
     Mapping from key256 to (refcount32, size32) to track chunks in the repository.
     Mapping from key256 to (refcount32, size32) to track chunks in the repository.
     """
     """
@@ -32,22 +56,6 @@ class ChunkIndex(MutableMapping):
             value = ChunkIndexEntry(*value)
             value = ChunkIndexEntry(*value)
         self.ht[key] = value
         self.ht[key] = value
 
 
-    def __getitem__(self, key):
-        return self.ht[key]
-
-    def __delitem__(self, key):
-        del self.ht[key]
-
-    def __contains__(self, key):
-        return key in self.ht
-
-    def __len__(self):
-        return len(self.ht)
-
-    def __iter__(self):
-        for key, value in self.ht.items():
-            yield key
-
     def iteritems(self):
     def iteritems(self):
         yield from self.ht.items()
         yield from self.ht.items()
 
 
@@ -56,9 +64,6 @@ class ChunkIndex(MutableMapping):
         refcount = min(self.MAX_VALUE, v.refcount + refs)
         refcount = min(self.MAX_VALUE, v.refcount + refs)
         self[key] = v._replace(refcount=refcount, size=size)
         self[key] = v._replace(refcount=refcount, size=size)
 
 
-    def clear(self):
-        self.ht.clear()
-
     @classmethod
     @classmethod
     def read(cls, path, permit_compact=False):
     def read(cls, path, permit_compact=False):
         return cls(path=path)
         return cls(path=path)
@@ -73,37 +78,18 @@ class ChunkIndex(MutableMapping):
 FuseVersionsIndexEntry = namedtuple('FuseVersionsIndexEntry', 'version hash')
 FuseVersionsIndexEntry = namedtuple('FuseVersionsIndexEntry', 'version hash')
 
 
 
 
-class FuseVersionsIndex(MutableMapping):
+class FuseVersionsIndex(HTProxyMixin, MutableMapping):
     """
     """
     Mapping from key128 to (file_version32, file_content_hash128) to support the FUSE versions view.
     Mapping from key128 to (file_version32, file_content_hash128) to support the FUSE versions view.
     """
     """
     def __init__(self):
     def __init__(self):
         self.ht = HashTableNT(key_size=16, value_format="<I16s", value_type=FuseVersionsIndexEntry)
         self.ht = HashTableNT(key_size=16, value_format="<I16s", value_type=FuseVersionsIndexEntry)
 
 
-    def __setitem__(self, key, value):
-        self.ht[key] = value
-
-    def __getitem__(self, key):
-        return self.ht[key]
-
-    def __delitem__(self, key):
-        del self.ht[key]
-
-    def __contains__(self, key):
-        return key in self.ht
-
-    def __len__(self):
-        return len(self.ht)
-
-    def __iter__(self):
-        for key, value in self.ht.items():
-            yield key
-
 
 
 NSIndex1Entry = namedtuple('NSIndex1Entry', 'segment offset')
 NSIndex1Entry = namedtuple('NSIndex1Entry', 'segment offset')
 
 
 
 
-class NSIndex1(MutableMapping):
+class NSIndex1(HTProxyMixin, MutableMapping):
     """
     """
     Mapping from key256 to (segment32, offset32), as used by legacy repo index of borg 1.x.
     Mapping from key256 to (segment32, offset32), as used by legacy repo index of borg 1.x.
     """
     """
@@ -121,25 +107,6 @@ class NSIndex1(MutableMapping):
         if path:
         if path:
             self._read(path)
             self._read(path)
 
 
-    def __setitem__(self, key, value):
-        self.ht[key] = value
-
-    def __getitem__(self, key):
-        return self.ht[key]
-
-    def __delitem__(self, key):
-        del self.ht[key]
-
-    def __contains__(self, key):
-        return key in self.ht
-
-    def __len__(self):
-        return len(self.ht)
-
-    def __iter__(self):
-        for key, value in self.ht.items():
-            yield key
-
     def iteritems(self, marker=None):
     def iteritems(self, marker=None):
         do_yield = marker is None
         do_yield = marker is None
         for key, value in self.ht.items():
         for key, value in self.ht.items():
@@ -148,9 +115,6 @@ class NSIndex1(MutableMapping):
             else:
             else:
                 do_yield = key == marker
                 do_yield = key == marker
 
 
-    def clear(self):
-        self.ht.clear()
-
     @classmethod
     @classmethod
     def read(cls, path, permit_compact=False):
     def read(cls, path, permit_compact=False):
         return cls(path=path)
         return cls(path=path)