[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