Package lacewing :: Module idpool
[frames] | no frames]

Source Code for Module lacewing.idpool

 1  # Copyright (c) 2011 Mathias Kaerlev. 
 2  # See LICENSE for details. 
 3   
 4  """ 
 5  Manage pool of IDs. 
 6  """ 
 7   
 8  import itertools 
 9   
10 -class IDPool(object):
11 _newIds = None 12 _freeIds = None 13
14 - def __init__(self, start = 0):
15 """ 16 Initializes a new pool, counting from start 17 """ 18 self._freeIds = [] 19 self._newIds = itertools.count(start)
20
21 - def pop(self):
22 """ 23 Take out an ID from the pool, and wait for it to be 24 put back again (see L{putBack}) 25 @return: A new ID from the pool. 26 """ 27 if self._freeIds: 28 return self._freeIds.pop() 29 else: 30 return self._newIds.next()
31
32 - def putBack(self, id):
33 """ 34 Puts back a previously popped ID. 35 """ 36 self._freeIds.append(id)
37