cython
1__doc__ = u"""
2>>> b1 = TestBuffer()
3>>> b2 = TestBufferRelease()
4
5>>> ms = memoryview(s)
6>>> ms.tobytes()
7b'abcdefg'
8
9>>> m1 = memoryview(b1)
10__getbuffer__ called
11
12Semantics changed in python 3.3
13>> m1.tobytes()
14__getbuffer__ called
15b'abcdefg'
16
17>>> m2 = memoryview(b2)
18__getbuffer__ called
19
20Semantics changed in python 3.3
21>> m2.tobytes()
22__getbuffer__ called
23releasing!
24b'abcdefg'
25
26>>> del m1
27>>> del m2
28releasing!
29"""
30
31s = b"abcdefg"
32
33cdef class TestBuffer:
34def __getbuffer__(self, Py_buffer* buffer, int flags):
35print u"__getbuffer__ called"
36buffer.buf = <char*>s
37buffer.obj = self
38buffer.len = len(s)
39buffer.readonly = 0
40buffer.format = "B"
41buffer.ndim = 0
42buffer.shape = NULL
43buffer.strides = NULL
44buffer.suboffsets = NULL
45buffer.itemsize = 1
46buffer.internal = NULL
47
48cdef class TestBufferRelease(TestBuffer):
49def __releasebuffer__(self, Py_buffer* buffer):
50print u"releasing!"
51
52cdef class TestCompileWithDocstring(object):
53def __getbuffer__(self, Py_buffer* buffer, int flags):
54"I am a docstring!"
55def __releasebuffer__(self, Py_buffer* buf):
56"I am a docstring!"
57