Issue #10211 : Buffer object should support the new buffer interface.
This commit is contained in:
parent
acb6e85808
commit
1d108bc714
|
@ -21,6 +21,14 @@ class BufferTests(unittest.TestCase):
|
|||
self.assertEqual(b[start:stop:step],
|
||||
s[start:stop:step])
|
||||
|
||||
def test_newbuffer_interface(self):
|
||||
# Test that the buffer object has the new buffer interface
|
||||
# as used by the memoryview object
|
||||
s = "".join(chr(c) for c in list(range(255, -1, -1)))
|
||||
b = buffer(s)
|
||||
m = memoryview(b) # Should not raise an exception
|
||||
self.assertEqual(m.tobytes(), s)
|
||||
|
||||
|
||||
def test_main():
|
||||
with test_support.check_py3k_warnings(("buffer.. not supported",
|
||||
|
|
|
@ -802,6 +802,16 @@ buffer_getcharbuf(PyBufferObject *self, Py_ssize_t idx, const char **pp)
|
|||
return size;
|
||||
}
|
||||
|
||||
static int buffer_getbuffer(PyBufferObject *self, Py_buffer *buf, int flags)
|
||||
{
|
||||
void *ptr;
|
||||
Py_ssize_t size;
|
||||
if (!get_buf(self, &ptr, &size, ANY_BUFFER))
|
||||
return -1;
|
||||
return PyBuffer_FillInfo(buf, (PyObject*)self, ptr, size,
|
||||
self->b_readonly, flags);
|
||||
}
|
||||
|
||||
static PySequenceMethods buffer_as_sequence = {
|
||||
(lenfunc)buffer_length, /*sq_length*/
|
||||
(binaryfunc)buffer_concat, /*sq_concat*/
|
||||
|
@ -823,6 +833,7 @@ static PyBufferProcs buffer_as_buffer = {
|
|||
(writebufferproc)buffer_getwritebuf,
|
||||
(segcountproc)buffer_getsegcount,
|
||||
(charbufferproc)buffer_getcharbuf,
|
||||
(getbufferproc)buffer_getbuffer,
|
||||
};
|
||||
|
||||
PyTypeObject PyBuffer_Type = {
|
||||
|
@ -845,7 +856,7 @@ PyTypeObject PyBuffer_Type = {
|
|||
PyObject_GenericGetAttr, /* tp_getattro */
|
||||
0, /* tp_setattro */
|
||||
&buffer_as_buffer, /* tp_as_buffer */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GETCHARBUFFER, /* tp_flags */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GETCHARBUFFER | Py_TPFLAGS_HAVE_NEWBUFFER, /* tp_flags */
|
||||
buffer_doc, /* tp_doc */
|
||||
0, /* tp_traverse */
|
||||
0, /* tp_clear */
|
||||
|
@ -864,4 +875,4 @@ PyTypeObject PyBuffer_Type = {
|
|||
0, /* tp_init */
|
||||
0, /* tp_alloc */
|
||||
buffer_new, /* tp_new */
|
||||
};
|
||||
};
|
Loading…
Reference in New Issue