On Sep 26, 2007, at 12:48 PM, Benji York wrote:

Maken Seteva wrote:
On 24. Sep 2007, at 18:53, Maken Seteva wrote:

Fellow Zopers.
I have made a slight modification to my intid util by inheriting from IntId and overriding _generateId(). I do this to be sure that all new created objects will have an incrementing number where the first object created gets id 1, the next gets id 2 and so on. This way I get for "free" sorting by
oldest/newest.

Not fully sure how to resolve conflicts though as I'm quite new to this.

The best way to resolve conflicts is to not create them. If you use the most significant bits of your int ID as a counter, and fill the least significant bits with conflict busting randomness, you'll be in good shape. We (ZC) have a package that does just that which we really need to release. If there's interest I'll take a stab at doing that soon.

Can't wait so :)
Otherwise I wrote a simple one in 10 lines of python:

 class Counter(object):
     def __init__(self, leastSignificantBits=4):
         self.incrementStep = 0x1 << leastSignificantBits
         self.counter = 0
         self.maxrand = pow(2, leastSignificantBits)

     def _increment(self):
         self.counter += self.incrementStep

     def __call__(self):
         self._increment()
         # OR the random bits at the end
         return self.counter | random.randrange(0, self.maxrand)


Test:
>>> import myintid
>>> c = myintid.Counter(8)
>>> print hex(c())
0x181
>>> for _ in range(17):
...     print hex(c())
...
0x277
0x3aa
0x456
0x5ad
0x6bf
0x794
0x80f
0x9ef
0xade
...

Maybe someone finds it useful
/Seteva_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to