14
14
15
15
__version__ = ' 1.2.0'
16
16
17
- import array
18
17
19
18
try :
20
19
from collections import OrderedDict
@@ -101,7 +100,7 @@ def bdecode(bytes x):
101
100
raise BTFailure(" invalid bencoded value (data after valid prefix)" )
102
101
return r
103
102
104
- def encode (v , r ):
103
+ cdef encode(v, list r):
105
104
tp = type (v)
106
105
if tp in encode_func:
107
106
return encode_func[tp](v, r)
@@ -114,47 +113,47 @@ def encode(v, r):
114
113
)
115
114
116
115
117
- def encode_int (long x , r ):
118
- r.fromstring (b' i' )
119
- r.fromstring (str (x).encode())
120
- r.fromstring (b' e' )
116
+ cdef encode_int(long x, list r):
117
+ r.append (b' i' )
118
+ r.append (str (x).encode())
119
+ r.append (b' e' )
121
120
122
121
123
- def encode_long (x , r ):
124
- r.fromstring (b' i' )
125
- r.fromstring (str (x).encode())
126
- r.fromstring (b' e' )
122
+ cdef encode_long(x, list r):
123
+ r.append (b' i' )
124
+ r.append (str (x).encode())
125
+ r.append (b' e' )
127
126
128
127
129
- def encode_bytes (bytes x , r ):
130
- r.fromstring (str (len (x)).encode())
131
- r.fromstring (b' :' )
132
- r.fromstring (x)
128
+ cdef encode_bytes(bytes x, list r):
129
+ r.append (str (len (x)).encode())
130
+ r.append (b' :' )
131
+ r.append (x)
133
132
134
133
135
- def encode_string (str x , r ):
136
- r.fromstring (str (len (x)).encode())
137
- r.fromstring (b' :' )
138
- r.fromstring (x.encode())
134
+ cdef encode_string(str x, list r):
135
+ r.append (str (len (x)).encode())
136
+ r.append (b' :' )
137
+ r.append (x.encode())
139
138
140
139
141
- def encode_list (x , r ):
142
- r.fromstring (b' l' )
140
+ cdef encode_list(x, list r):
141
+ r.append (b' l' )
143
142
for i in x:
144
143
encode(i, r)
145
- r.fromstring (b' e' )
144
+ r.append (b' e' )
146
145
147
146
148
- def encode_dict (x , r ):
149
- r.fromstring (b' d' )
147
+ cdef encode_dict(x, list r):
148
+ r.append (b' d' )
150
149
item_list = list (x.items())
151
150
item_list.sort()
152
151
for k, v in item_list:
153
152
if isinstance (k, str ):
154
153
k = k.encode()
155
154
encode_bytes(k, r)
156
155
encode(v, r)
157
- r.fromstring (b' e' )
156
+ r.append (b' e' )
158
157
159
158
160
159
encode_func = {
@@ -171,6 +170,6 @@ encode_func = {
171
170
172
171
173
172
def bencode (x ):
174
- r = array.array(ARRAY_TYPECODE)
173
+ r = []
175
174
encode(x, r)
176
- return r.tostring( )
175
+ return b ' ' .join(r )
0 commit comments