Winand

Untitled

Sep 28th, 2013
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.27 KB | None | 0 0
  1. class FCollection():
  2.     def __init__(self):
  3.         self.items = [] #data
  4.         self.tblIdxLookup = {} #key->index
  5.         self.tblKeyLookup = [] #index->key
  6.         self.tblFreeKeys = [] #freed keys
  7.    
  8.     def add(self, v):
  9.         if len(self.tblFreeKeys):
  10.             k = self.tblFreeKeys.pop()
  11.         else: k = len(self.tblKeyLookup)
  12.         self.items.append(v)
  13.         self.tblIdxLookup[k] = len(self.tblKeyLookup)
  14.         self.tblKeyLookup.append(k)
  15.        
  16.     def get(self, idx):
  17.         return self.items[idx]
  18.        
  19.     def getByKey(self, key):
  20.         return self.items[self.tblIdxLookup[key]]
  21.        
  22.     def remove(self, idx):
  23.         key = self.tblKeyLookup.pop(idx)
  24.         del self.tblIdxLookup[key]
  25.         self.tblFreeKeys.append(key)
  26.         del self.items[idx]
  27.        
  28.     def removeByKey(self, key):
  29.         idx = self.tblIdxLookup.pop(key)
  30.         del self.tblKeyLookup[idx]
  31.         self.tblFreeKeys.append(key)
  32.         del self.items[idx]
  33.    
  34.     def key(self, idx):
  35.         return self.tblKeyLookup[idx]
  36.                
  37.     def index(self, key):
  38.         return self.tblIdxLookup[key]        
  39.        
  40. fc = FCollection()
  41.  
  42. fc.add("along")
  43. fc.add("comes")
  44. fc.add("Mary")
  45. key = fc.key(1)
  46. fc.removeByKey(key)
  47. print fc.get(1)
Advertisement
Add Comment
Please, Sign In to add comment