Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdc1fbb0

Browse files
committed
Pure python deque class missing from inputstream change
--HG--extra : convert_revision : svn%3Aacbfec75-9323-0410-a652-858a13e371e0/trunk%401013
1 parentb60997a commitdc1fbb0

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

‎src/html5lib/utils.py‎

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,123 @@ def __init__(self, items=()):
3434

3535
def__getitem__(self,key):
3636
returndict.get(self,key,self.default)
37+
38+
#Pure python implementation of deque taken from the ASPN Python Cookbook
39+
#Original code by Raymond Hettinger
40+
41+
classdeque(object):
42+
43+
def__init__(self,iterable=(),maxsize=-1):
44+
ifnothasattr(self,'data'):
45+
self.left=self.right=0
46+
self.data= {}
47+
self.maxsize=maxsize
48+
self.extend(iterable)
49+
50+
defappend(self,x):
51+
self.data[self.right]=x
52+
self.right+=1
53+
ifself.maxsize!=-1andlen(self)>self.maxsize:
54+
self.popleft()
55+
56+
defappendleft(self,x):
57+
self.left-=1
58+
self.data[self.left]=x
59+
ifself.maxsize!=-1andlen(self)>self.maxsize:
60+
self.pop()
61+
62+
defpop(self):
63+
ifself.left==self.right:
64+
raiseIndexError('cannot pop from empty deque')
65+
self.right-=1
66+
elem=self.data[self.right]
67+
delself.data[self.right]
68+
returnelem
69+
70+
defpopleft(self):
71+
ifself.left==self.right:
72+
raiseIndexError('cannot pop from empty deque')
73+
elem=self.data[self.left]
74+
delself.data[self.left]
75+
self.left+=1
76+
returnelem
77+
78+
defclear(self):
79+
self.data.clear()
80+
self.left=self.right=0
81+
82+
defextend(self,iterable):
83+
foreleminiterable:
84+
self.append(elem)
85+
86+
defextendleft(self,iterable):
87+
foreleminiterable:
88+
self.appendleft(elem)
89+
90+
defrotate(self,n=1):
91+
ifself:
92+
n%=len(self)
93+
foriinxrange(n):
94+
self.appendleft(self.pop())
95+
96+
def__getitem__(self,i):
97+
ifi<0:
98+
i+=len(self)
99+
try:
100+
returnself.data[i+self.left]
101+
exceptKeyError:
102+
raiseIndexError
103+
104+
def__setitem__(self,i,value):
105+
ifi<0:
106+
i+=len(self)
107+
try:
108+
self.data[i+self.left]=value
109+
exceptKeyError:
110+
raiseIndexError
111+
112+
def__delitem__(self,i):
113+
size=len(self)
114+
ifnot (-size<=i<size):
115+
raiseIndexError
116+
data=self.data
117+
ifi<0:
118+
i+=size
119+
forjinxrange(self.left+i,self.right-1):
120+
data[j]=data[j+1]
121+
self.pop()
122+
123+
def__len__(self):
124+
returnself.right-self.left
125+
126+
def__cmp__(self,other):
127+
iftype(self)!=type(other):
128+
returncmp(type(self),type(other))
129+
returncmp(list(self),list(other))
130+
131+
def__repr__(self,_track=[]):
132+
ifid(self)in_track:
133+
return'...'
134+
_track.append(id(self))
135+
r='deque(%r)'% (list(self),)
136+
_track.remove(id(self))
137+
returnr
138+
139+
def__getstate__(self):
140+
return (tuple(self),)
141+
142+
def__setstate__(self,s):
143+
self.__init__(s[0])
144+
145+
def__hash__(self):
146+
raiseTypeError
147+
148+
def__copy__(self):
149+
returnself.__class__(self)
150+
151+
def__deepcopy__(self,memo={}):
152+
fromcopyimportdeepcopy
153+
result=self.__class__()
154+
memo[id(self)]=result
155+
result.__init__(deepcopy(tuple(self),memo))
156+
returnresult

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp