[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