~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/btree_index.py

  • Committer: John Arbash Meinel
  • Date: 2010-08-04 04:36:26 UTC
  • mto: This revision was merged to the branch mainline in revision 5390.
  • Revision ID: john@arbash-meinel.com-20100804043626-pwawyjkb6r6wzs9a
Make _LeafNode inherit from dict (is-a rather than have-a)

It avoids having another object layer, and indirection via attribute
and forwarding functions.

TIMEIT shows:
  14.6us raw dict
  26.6us subclass
  57.9us wrapper class

Show diffs side-by-side

added added

removed removed

Lines of Context:
602
602
        """In memory index's have no known corruption at the moment."""
603
603
 
604
604
 
605
 
class _LeafNode(object):
 
605
class _LeafNode(dict):
606
606
    """A leaf node for a serialised B+Tree index."""
607
607
 
608
 
    __slots__ = ('_keys', 'min_key', 'max_key')
 
608
    __slots__ = ('min_key', 'max_key')
609
609
 
610
610
    def __init__(self, bytes, key_length, ref_list_length):
611
611
        """Parse bytes to create a leaf node object."""
617
617
            self.max_key = key_list[-1][0]
618
618
        else:
619
619
            self.min_key = self.max_key = None
620
 
        self._keys = dict(key_list)
621
 
 
622
 
    def __len__(self):
623
 
        return len(self._keys)
624
 
 
625
 
    def __contains__(self, key):
626
 
        return key in self._keys
627
 
 
628
 
    def __getitem__(self, key):
629
 
        return self._keys[key]
 
620
        super(_LeafNode, self).__init__(key_list)
630
621
 
631
622
    def all_items(self):
632
623
        """Return a sorted list of (key, (value, refs)) items"""
633
 
        items = self._keys.items()
 
624
        items = self.items()
634
625
        items.sort()
635
626
        return items
636
627
 
637
628
    def all_keys(self):
638
629
        """Return a sorted list of all keys."""
639
 
        keys = self._keys.keys()
 
630
        keys = self.keys()
640
631
        keys.sort()
641
632
        return keys
642
633