fixed SkipList.finalize's arguments causing pylint warnings
[p2pool.git] / p2pool / util / skiplist.py
index ed1132c..e9e36c2 100644 (file)
@@ -1,25 +1,24 @@
-from p2pool.util import math, expiring_dict, memoize
+from p2pool.util import math, memoize
 
-class Base(object):
-    def finalize(self, sol):
-        return sol
-
-class SkipList(Base):
-    P = .5
+class SkipList(object):
+    def __init__(self, p=0.5):
+        self.p = p
+        
+        self.skips = {}
     
-    def __init__(self):
-        self.skips = expiring_dict.ExpiringDict(600)
+    def forget_item(self, item):
+        self.skips.pop(item, None)
     
-    @memoize.memoize_with_backing(expiring_dict.ExpiringDict(5))
-    def __call__(self, start, *args, **kwargs):
+    @memoize.memoize_with_backing(memoize.LRUDict(5))
+    def __call__(self, start, *args):
         updates = {}
         pos = start
         sol = self.initial_solution(start, args)
         if self.judge(sol, args) == 0:
-            return self.finalize(sol)
+            return self.finalize(sol, args)
         while True:
             if pos not in self.skips:
-                self.skips[pos] = math.geometric(self.P), [(self.previous(pos), self.get_delta(pos))]
+                self.skips[pos] = math.geometric(self.p), [(self.previous(pos), self.get_delta(pos))]
             skip_length, skip = self.skips[pos]
             
             # fill previous updates
@@ -42,7 +41,7 @@ class SkipList(Base):
                 decision = self.judge(sol_if, args)
                 #print pos, sol, jump, delta, sol_if, decision
                 if decision == 0:
-                    return self.finalize(sol_if)
+                    return self.finalize(sol_if, args)
                 elif decision < 0:
                     sol = sol_if
                     break
@@ -55,22 +54,6 @@ class SkipList(Base):
             # XXX could be better by combining updates
             for x in updates:
                 updates[x] = updates[x][0], self.combine_deltas(updates[x][1], delta) if updates[x][1] is not None else delta
-        
-        
-        return item_hash
-
-class NotSkipList(Base):
-    def __call__(self, start, *args):
-        pos = start
-        sol = self.initial_solution(start, args)
-        while True:
-            decision = self.judge(sol, args)
-            if decision > 0:
-                raise AssertionError()
-            elif decision == 0:
-                return self.finalize(sol)
-            
-            delta = self.get_delta(pos)
-            sol = self.apply_delta(sol, delta, args)
-            
-            pos = self.previous(pos)
+    
+    def finalize(self, sol, args):
+        return sol