[pypy-svn] pypy collections-module: rotate().

arigo commits-noreply at bitbucket.org
Tue Feb 15 17:26:05 CET 2011


Author: Armin Rigo <arigo at tunes.org>
Branch: collections-module
Changeset: r41974:28ab4b7a2149
Date: 2011-02-15 16:45 +0100
http://bitbucket.org/pypy/pypy/changeset/28ab4b7a2149/

Log:	rotate().

diff --git a/pypy/module/_collections/interp_deque.py b/pypy/module/_collections/interp_deque.py
--- a/pypy/module/_collections/interp_deque.py
+++ b/pypy/module/_collections/interp_deque.py
@@ -246,6 +246,24 @@
         self.modified()
         return w_obj
 
+    @unwrap_spec('self', int)
+    def rotate(self, n):
+        len = self.len
+        if len == 0:
+            return
+        halflen = (len+1) >> 1
+        if n > halflen or n < -halflen:
+            n %= len
+            if n > halflen:
+                n -= len
+        i = 0
+        while i < n:
+            self.appendleft(self.pop())
+            i += 1
+        while i > n:
+            self.append(self.popleft())
+            i -= 1
+
     @unwrap_spec('self')
     def iter(self):
         return W_DequeIter(self)
@@ -335,6 +353,7 @@
         if step == 0:  # index only
             # delitem() implemented in terms of rotate for simplicity and
             # reasonable performance near the end points.
+            i = start
             self.rotate(-i)
             self.popleft()
             self.rotate(i)
@@ -391,6 +410,7 @@
     extendleft = interp2app(W_Deque.extendleft),
     pop        = interp2app(W_Deque.pop),
     popleft    = interp2app(W_Deque.popleft),
+    rotate     = interp2app(W_Deque.rotate),
     __weakref__ = make_weakref_descr(W_Deque),
     __iter__ = interp2app(W_Deque.iter),
     __len__ = interp2app(W_Deque.length),


More information about the Pypy-commit mailing list