[pypy-commit] pypy PyBuffer: Fix translation and give BufferView1D and BufferViewND a common base class
rlamy
pypy.commits at gmail.com
Tue Mar 28 12:24:22 EDT 2017
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: PyBuffer
Changeset: r90848:afa6dad368e3
Date: 2017-03-28 17:23 +0100
http://bitbucket.org/pypy/pypy/changeset/afa6dad368e3/
Log: Fix translation and give BufferView1D and BufferViewND a common base
class
diff --git a/pypy/interpreter/buffer.py b/pypy/interpreter/buffer.py
--- a/pypy/interpreter/buffer.py
+++ b/pypy/interpreter/buffer.py
@@ -123,49 +123,6 @@
def getstrides(self):
return [1]
-class BufferView1D(Buffer):
- def __init__(self, data, format, itemsize):
- self.data = data
- self.readonly = data.readonly
- self.format = format
- self.itemsize = itemsize
-
- def getlength(self):
- return self.data.getlength()
-
- def as_str(self):
- return self.data.as_str()
-
- def as_str_and_offset_maybe(self):
- return self.data.as_str_and_offset_maybe()
-
- def getitem(self, index):
- return self.data.getitem(index)
-
- def setitem(self, index, value):
- return self.data.setitem(index, value)
-
- def get_raw_address(self):
- return self.data.get_raw_address()
-
- def as_binary(self):
- return self.data
-
- def getformat(self):
- return self.format
-
- def getitemsize(self):
- return self.itemsize
-
- def getndim(self):
- return 1
-
- def getshape(self):
- return [self.getlength() // self.itemsize]
-
- def getstrides(self):
- return [self.itemsize]
-
class BinaryBuffer(Buffer):
"""Base class for buffers of bytes"""
diff --git a/pypy/objspace/std/memoryobject.py b/pypy/objspace/std/memoryobject.py
--- a/pypy/objspace/std/memoryobject.py
+++ b/pypy/objspace/std/memoryobject.py
@@ -6,7 +6,7 @@
from rpython.rlib.objectmodel import compute_hash
from rpython.rlib.rstruct.error import StructError
from pypy.interpreter.baseobjspace import W_Root
-from pypy.interpreter.buffer import Buffer, SubBuffer, StringBuffer, BufferView1D
+from pypy.interpreter.buffer import Buffer, SubBuffer
from pypy.interpreter.error import OperationError, oefmt
from pypy.interpreter.gateway import interp2app
from pypy.interpreter.typedef import TypeDef, GetSetProperty, make_weakref_descr
@@ -721,6 +721,8 @@
return 0
class BufferSlice(Buffer):
+ _immutable_ = True
+ _attrs_ = ['buf', 'readonly', 'shape', 'strides', 'offset', 'step']
def __init__(self, buf, start, step, length):
self.buf = buf
self.readonly = self.buf.readonly
@@ -783,15 +785,10 @@
def getstrides(self):
return self.strides
-class BufferViewND(Buffer):
- def __init__(self, parent, ndim, shape, strides):
- assert parent.getndim() == 1
- assert len(shape) == len(strides) == ndim
- self.parent = parent
- self.readonly = parent.readonly
- self.ndim = ndim
- self.shape = shape
- self.strides = strides
+
+class BufferViewBase(Buffer):
+ _immutable_ = True
+ _attrs_ = ['readonly', 'parent']
def getlength(self):
return self.parent.getlength()
@@ -802,14 +799,11 @@
def as_str_and_offset_maybe(self):
return self.parent.as_str_and_offset_maybe()
- def as_binary(self):
- return self.parent.as_binary()
-
def getitem(self, index):
return self.parent.getitem(index)
- def setitem(self, index, char):
- self.parent.setitem(index, char)
+ def setitem(self, index, value):
+ return self.parent.setitem(index, value)
def getslice(self, start, stop, step, size):
return self.parent.getslice(start, stop, step, size)
@@ -820,6 +814,47 @@
def get_raw_address(self):
return self.parent.get_raw_address()
+ def as_binary(self):
+ return self.parent.as_binary()
+
+class BufferView1D(BufferViewBase):
+ _immutable_ = True
+ _attrs_ = ['readonly', 'parent', 'format', 'itemsize']
+
+ def __init__(self, parent, format, itemsize):
+ self.parent = parent
+ self.readonly = parent.readonly
+ self.format = format
+ self.itemsize = itemsize
+
+ def getformat(self):
+ return self.format
+
+ def getitemsize(self):
+ return self.itemsize
+
+ def getndim(self):
+ return 1
+
+ def getshape(self):
+ return [self.getlength() // self.itemsize]
+
+ def getstrides(self):
+ return [self.itemsize]
+
+class BufferViewND(BufferViewBase):
+ _immutable_ = True
+ _attrs_ = ['readonly', 'parent', 'ndim', 'shape', 'strides']
+
+ def __init__(self, parent, ndim, shape, strides):
+ assert parent.getndim() == 1
+ assert len(shape) == len(strides) == ndim
+ self.parent = parent
+ self.readonly = parent.readonly
+ self.ndim = ndim
+ self.shape = shape
+ self.strides = strides
+
def getformat(self):
return self.parent.getformat()
More information about the pypy-commit
mailing list