Author: Ronan Lamy <[email protected]>
Branch: PyBuffer
Changeset: r91142:0db5e3751f7b
Date: 2017-04-27 18:24 +0100
http://bitbucket.org/pypy/pypy/changeset/0db5e3751f7b/
Log: Merge RawBuffer and ByteBuffer
diff --git a/pypy/module/_io/interp_bufferedio.py
b/pypy/module/_io/interp_bufferedio.py
--- a/pypy/module/_io/interp_bufferedio.py
+++ b/pypy/module/_io/interp_bufferedio.py
@@ -9,9 +9,7 @@
from pypy.interpreter.gateway import interp2app, unwrap_spec, WrappedDefault
from pypy.interpreter.buffer import SimpleView
-from rpython.rlib.buffer import Buffer, SubBuffer
-from rpython.rlib.rgc import (
- nonmoving_raw_ptr_for_resizable_list, resizable_list_supporting_raw_ptr)
+from rpython.rlib.buffer import ByteBuffer, SubBuffer
from rpython.rlib.rstring import StringBuilder
from rpython.rlib.rarithmetic import r_longlong, intmask
from rpython.rlib import rposix
@@ -160,26 +158,6 @@
readinto1 = interp2app(W_BufferedIOBase.readinto1_w),
)
-class RawBuffer(Buffer):
- _immutable_ = True
-
- def __init__(self, n):
- self.length = n
- self.buf = resizable_list_supporting_raw_ptr(['\0'] * n)
- self.readonly = False
-
- def getlength(self):
- return self.length
-
- def getitem(self, index):
- return self.buf[index]
-
- def setitem(self, index, char):
- self.buf[index] = char
-
- def get_raw_address(self):
- return nonmoving_raw_ptr_for_resizable_list(self.buf)
-
class BufferedMixin:
_mixin_ = True
@@ -218,7 +196,7 @@
raise oefmt(space.w_ValueError,
"buffer size must be strictly positive")
- self.buffer = RawBuffer(self.buffer_size)
+ self.buffer = ByteBuffer(self.buffer_size)
self.lock = TryLock(space)
@@ -626,7 +604,7 @@
if n <= current_size:
return self._read_fast(n)
- result_buffer = RawBuffer(n)
+ result_buffer = ByteBuffer(n)
remaining = n
written = 0
if current_size:
@@ -742,8 +720,8 @@
pos = 0
found = False
while pos < have:
- # 'buffer.buf[]' instead of 'buffer[]' because RPython...
- c = self.buffer.buf[pos]
+ # 'buffer.data[]' instead of 'buffer[]' because RPython...
+ c = self.buffer.data[pos]
pos += 1
if c == '\n':
self.pos = pos
@@ -802,7 +780,7 @@
# Make some place by shifting the buffer
for i in range(self.write_pos, self.write_end):
# XXX: messing with buffer internals
- self.buffer.buf[i - self.write_pos] = self.buffer.buf[i]
+ self.buffer.data[i - self.write_pos] = self.buffer.data[i]
self.write_end -= self.write_pos
self.raw_pos -= self.write_pos
newpos = self.pos - self.write_pos
diff --git a/rpython/rlib/buffer.py b/rpython/rlib/buffer.py
--- a/rpython/rlib/buffer.py
+++ b/rpython/rlib/buffer.py
@@ -1,7 +1,8 @@
"""
Buffer protocol support.
"""
-from rpython.rlib.rgc import nonmoving_raw_ptr_for_resizable_list
+from rpython.rlib.rgc import (
+ nonmoving_raw_ptr_for_resizable_list, resizable_list_supporting_raw_ptr)
from rpython.rlib.signature import signature
from rpython.rlib import types
@@ -62,8 +63,8 @@
class ByteBuffer(Buffer):
_immutable_ = True
- def __init__(self, len):
- self.data = ['\x00'] * len
+ def __init__(self, n):
+ self.data = resizable_list_supporting_raw_ptr(['\0'] * n)
self.readonly = False
def getlength(self):
@@ -117,7 +118,8 @@
_attrs_ = ['buffer', 'offset', 'size', 'readonly']
_immutable_ = True
- @signature(types.any(), types.instance(Buffer), types.int(), types.int(),
returns=types.none())
+ @signature(types.any(), types.instance(Buffer), types.int(), types.int(),
+ returns=types.none())
def __init__(self, buffer, offset, size):
self.readonly = buffer.readonly
if isinstance(buffer, SubBuffer): # don't nest them
diff --git a/rpython/rlib/rstring.py b/rpython/rlib/rstring.py
--- a/rpython/rlib/rstring.py
+++ b/rpython/rlib/rstring.py
@@ -8,7 +8,6 @@
from rpython.rlib import jit
from rpython.rlib.objectmodel import newlist_hint, resizelist_hint,
specialize, not_rpython
from rpython.rlib.rarithmetic import ovfcheck, LONG_BIT as BLOOM_WIDTH
-from rpython.rlib.buffer import Buffer
from rpython.rlib.unicodedata import unicodedb_5_2_0 as unicodedb
from rpython.rtyper.extregistry import ExtRegistryEntry
from rpython.tool.pairtype import pairtype
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit