summaryrefslogtreecommitdiff
path: root/tests/buffers/buffer.pyx
blob: 16d593d2353ac467876e5317029822cfba4026d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
__doc__ = u"""
>>> b1 = TestBuffer()
>>> b2 = TestBufferRelease()
"""

import sys
if sys.version_info[0] >= 3:
    __doc__ += u"""
>>> ms = memoryview(s)
>>> ms.tobytes()
b'abcdefg'

>>> m1 = memoryview(b1)
__getbuffer__ called

Semantics changed in python 3.3
>> m1.tobytes()
__getbuffer__ called
b'abcdefg'

>>> m2 = memoryview(b2)
__getbuffer__ called

Semantics changed in python 3.3
>> m2.tobytes()
__getbuffer__ called
releasing!
b'abcdefg'

>>> del m1
>>> del m2
releasing!
"""

s = b"abcdefg"

cdef class TestBuffer:
    def __getbuffer__(self, Py_buffer* buffer, int flags):
        print u"__getbuffer__ called"
        buffer.buf = <char*>s
        buffer.obj = self
        buffer.len = len(s)
        buffer.readonly = 0
        buffer.format = "B"
        buffer.ndim = 0
        buffer.shape = NULL
        buffer.strides = NULL
        buffer.suboffsets = NULL
        buffer.itemsize = 1
        buffer.internal = NULL

cdef class TestBufferRelease(TestBuffer):
    def __releasebuffer__(self, Py_buffer* buffer):
        print u"releasing!"

cdef class TestCompileWithDocstring(object):
    def __getbuffer__(self, Py_buffer* buffer, int flags):
        "I am a docstring!"
    def __releasebuffer__(self, Py_buffer* buf):
        "I am a docstring!"