[pypy-svn] r15858 - pypy/dist/pypy/lib

pedronis at codespeak.net pedronis at codespeak.net
Tue Aug 9 19:58:56 CEST 2005


Author: pedronis
Date: Tue Aug  9 19:58:55 2005
New Revision: 15858

Removed:
   pypy/dist/pypy/lib/collections.py
Log:
removing for reverting



Deleted: /pypy/dist/pypy/lib/collections.py
==============================================================================
--- /pypy/dist/pypy/lib/collections.py	Tue Aug  9 19:58:55 2005
+++ (empty file)
@@ -1,284 +0,0 @@
-"""High performance data structures
-"""
-#
-# Copied and completed from the sandbox of CPython
-#   (nondist/sandbox/collections/pydeque.py rev 1.1, Raymond Hettinger)
-#
-
-import operator
-try:
-    from thread import get_ident as _thread_ident
-except ImportError:
-    def _thread_ident():
-        return -1
-
-
-n = 30
-LFTLNK = n
-RGTLNK = n+1
-BLOCKSIZ = n+2
-
-class deque(object):
-
-    def __new__(cls, iterable=()):
-        self = super(deque, cls).__new__(cls)
-        self.clear()
-        return self
-
-    def __init__(self, iterable=()):
-        add = self.append
-        for elem in iterable:
-            add(elem)
-
-    def clear(self):
-        self.right = self.left = [None] * BLOCKSIZ
-        self.rightndx = n//2   # points to last written element
-        self.leftndx = n//2+1
-
-    def append(self, x):
-        self.rightndx += 1
-        if self.rightndx == n:
-            newblock = [None] * BLOCKSIZ
-            self.right[RGTLNK] = newblock
-            newblock[LFTLNK] = self.right
-            self.right = newblock
-            self.rightndx = 0
-        self.right[self.rightndx] = x
-
-    def appendleft(self, x):
-        self.leftndx -= 1
-        if self.leftndx == -1:
-            newblock = [None] * BLOCKSIZ
-            self.left[LFTLNK] = newblock
-            newblock[RGTLNK] = self.left
-            self.left = newblock
-            self.leftndx = n-1
-        self.left[self.leftndx] = x
-
-    def extend(self, iterable):
-        for elem in iterable:
-            self.append(elem)
-
-    def extendleft(self, iterable):
-        for elem in iterable:
-            self.appendleft(elem)
-
-    def pop(self):
-        if self.left is self.right and self.leftndx > self.rightndx:
-            raise IndexError, "pop from an empty deque"
-        x = self.right[self.rightndx]
-        self.right[self.rightndx] = None
-        self.rightndx -= 1
-        if self.rightndx == -1:
-            prevblock = self.right[LFTLNK]
-            if prevblock is None:
-                # the deque has become empty; recenter instead of freeing block
-                self.rightndx = n//2
-                self.leftndx = n//2+1
-            else:
-                prevblock[RGTLNK] = None
-                self.right[LFTLNK] = None
-                self.right = prevblock
-                self.rightndx = n-1
-        return x
-
-    def popleft(self):
-        if self.left is self.right and self.leftndx > self.rightndx:
-            raise IndexError, "pop from an empty deque"
-        x = self.left[self.leftndx]
-        self.left[self.leftndx] = None
-        self.leftndx += 1
-        if self.leftndx == n:
-            prevblock = self.left[RGTLNK]
-            if prevblock is None:
-                # the deque has become empty; recenter instead of freeing block
-                self.rightndx = n//2
-                self.leftndx = n//2+1
-            else:
-                prevblock[LFTLNK] = None
-                self.left[RGTLNK] = None
-                self.left = prevblock
-                self.leftndx = 0
-        return x
-
-    def remove(self, value):
-        del self[operator.indexOf(self, value)]
-
-    def rotate(self, n=1):
-        length = len(self)
-        if length == 0:
-            return
-        halflen = (length+1) >> 1
-        if n > halflen or n < -halflen:
-            n %= length
-            if n > halflen:
-                n -= length
-            elif n < -halflen:
-                n += length
-        while n > 0:
-            self.appendleft(self.pop())
-            n -= 1
-        while n < 0:
-            self.append(self.popleft())
-            n += 1
-
-    def __repr__(self):
-        threadlocalattr = '__repr' + str(_thread_ident())
-        if threadlocalattr in self.__dict__:
-            return 'deque([...])'
-        else:
-            self.__dict__[threadlocalattr] = True
-            try:
-                return 'deque(%r)' % (list(self),)
-            finally:
-                del self.__dict__[threadlocalattr]
-
-    def __iter__(self):
-        return dequeIterator(self)
-            
-
-    def __reversed__(self):
-        return dequeIterator(self,True)
-    
-    def __len__(self):
-        sum = 0
-        block = self.left
-        while block:
-            sum += n
-            block = block[RGTLNK]
-        return sum + self.rightndx - self.leftndx + 1 - n
-
-    def __getref(self, index):
-        if index >= 0:
-            block = self.left
-            while block:
-                l, r = 0, n
-                if block is self.left:
-                    l = self.leftndx
-                if block is self.right:
-                    r = self.rightndx + 1
-                span = r-l
-                if index < span:
-                    return block, l+index
-                index -= span
-                block = block[RGTLNK]
-        else:
-            block = self.right
-            while block:
-                l, r = 0, n
-                if block is self.left:
-                    l = self.leftndx
-                if block is self.right:
-                    r = self.rightndx + 1
-                negative_span = l-r
-                if index >= negative_span:
-                    return block, r+index
-                index -= negative_span
-                block = block[LFTLNK]
-        raise IndexError("deque index out of range")
-
-    def __getitem__(self, index):
-        block, index = self.__getref(index)
-        return block[index]
-
-    def __setitem__(self, index, value):
-        block, index = self.__getref(index)
-        block[index] = value
-
-    def __delitem__(self, index):
-        length = len(self)
-        if index >= 0:
-            if index >= length:
-                raise IndexError("deque index out of range")
-            self.rotate(-index)
-            self.popleft()
-            self.rotate(index)
-        else:
-            index = ~index
-            if index >= length:
-                raise IndexError("deque index out of range")
-            self.rotate(index)
-            self.pop()
-            self.rotate(-index)
-
-    def __reduce_ex__(self, proto):
-        return type(self), (), self.__dict__, iter(self), None
-
-    def __hash__(self):
-        raise TypeError, "deque objects are unhashable"
-
-    def __copy__(self):
-        return self.__class__(self)
-
-    # XXX make comparison more efficient
-    def __eq__(self, other):
-        if isinstance(other, deque):
-            return list(self) == list(other)
-        else:
-            return NotImplemented
-
-    def __ne__(self, other):
-        if isinstance(other, deque):
-            return list(self) != list(other)
-        else:
-            return NotImplemented
-
-    def __lt__(self, other):
-        if isinstance(other, deque):
-            return list(self) < list(other)
-        else:
-            return NotImplemented
-
-    def __le__(self, other):
-        if isinstance(other, deque):
-            return list(self) <= list(other)
-        else:
-            return NotImplemented
-
-    def __gt__(self, other):
-        if isinstance(other, deque):
-            return list(self) > list(other)
-        else:
-            return NotImplemented
-
-    def __ge__(self, other):
-        if isinstance(other, deque):
-            return list(self) >= list(other)
-        else:
-            return NotImplemented
-
-class dequeIterator:
-    
-    def __init__(self, dequeobj, reverse=False):
-        self.deque = dequeobj
-        self.length = len(dequeobj)
-        self.consumed = 0
-        if reverse:
-            self.index = self.length-1
-            self.inc = -1
-        else:
-            self.index = 0
-            self.inc = 1
-        self.reverse = reverse
-
-    def __iter__(self):
-        return self
-    
-    def next(self):
-        if self.length == len(self.deque):
-            if self.index < self.length and self.index >= 0:
-                res = self.deque[self.index]
-                self.index += self.inc
-                self.consumed += 1
-                return res
-            else:
-                raise StopIteration
-        else:
-            self.deque = []
-            self.index = 0
-            self.length = self.consumed = 0
-            raise RuntimeError("deque mutated during iteration")
-    
-    def __len__(self):
-        return self.length - self.consumed
-        
\ No newline at end of file



More information about the Pypy-commit mailing list