annotate Include/memoryobject.h @ 81922:4ab386b00aaf

Fix tests for issue #11159.
author Serhiy Storchaka <storchaka@gmail.com>
date Sat, 02 Feb 2013 12:17:50 +0200
parents bc0281f85409
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
1 /* Memory view object. In Python this is available as "memoryview". */
42665
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
2
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
3 #ifndef Py_MEMORYOBJECT_H
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
4 #define Py_MEMORYOBJECT_H
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
5 #ifdef __cplusplus
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
6 extern "C" {
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
7 #endif
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
8
75254
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
9 #ifndef Py_LIMITED_API
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
10 PyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type;
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
11 #endif
42665
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
12 PyAPI_DATA(PyTypeObject) PyMemoryView_Type;
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
13
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
14 #define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type)
42665
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
15
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 65944
diff changeset
16 #ifndef Py_LIMITED_API
75254
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
17 /* Get a pointer to the memoryview's private copy of the exporter's buffer. */
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
18 #define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view)
75254
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
19 /* Get a pointer to the exporting object (this may be NULL!). */
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
20 #define PyMemoryView_GET_BASE(op) (((PyMemoryViewObject *)(op))->view.obj)
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 65944
diff changeset
21 #endif
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
22
42665
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
23 PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base);
75254
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
24 PyAPI_FUNC(PyObject *) PyMemoryView_FromMemory(char *mem, Py_ssize_t size,
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
25 int flags);
67419
8a302a09ee83 Remove buffer API from stable ABI for now, see #10181.
Martin v. Löwis <martin@v.loewis.de>
parents: 66664
diff changeset
26 #ifndef Py_LIMITED_API
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
27 PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info);
67419
8a302a09ee83 Remove buffer API from stable ABI for now, see #10181.
Martin v. Löwis <martin@v.loewis.de>
parents: 66664
diff changeset
28 #endif
75254
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
29 PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
30 int buffertype,
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
31 char order);
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
32
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
33
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
34 /* The structs are declared here so that macros can work, but they shouldn't
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
35 be considered public. Don't access their fields directly, use the macros
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
36 and functions instead! */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
37 #ifndef Py_LIMITED_API
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
38 #define _Py_MANAGED_BUFFER_RELEASED 0x001 /* access to exporter blocked */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
39 #define _Py_MANAGED_BUFFER_FREE_FORMAT 0x002 /* free format */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
40 typedef struct {
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
41 PyObject_HEAD
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
42 int flags; /* state flags */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
43 Py_ssize_t exports; /* number of direct memoryview exports */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
44 Py_buffer master; /* snapshot buffer obtained from the original exporter */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
45 } _PyManagedBufferObject;
42665
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
46
50501
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
47
75254
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
48 /* static storage used for casting between formats */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
49 #define _Py_MEMORYVIEW_MAX_FORMAT 3 /* must be >= 3 */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
50
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
51 /* memoryview state flags */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
52 #define _Py_MEMORYVIEW_RELEASED 0x001 /* access to master buffer blocked */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
53 #define _Py_MEMORYVIEW_C 0x002 /* C-contiguous layout */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
54 #define _Py_MEMORYVIEW_FORTRAN 0x004 /* Fortran contiguous layout */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
55 #define _Py_MEMORYVIEW_SCALAR 0x008 /* scalar: ndim = 0 */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
56 #define _Py_MEMORYVIEW_PIL 0x010 /* PIL-style layout */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
57
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
58 typedef struct {
75254
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
59 PyObject_VAR_HEAD
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
60 _PyManagedBufferObject *mbuf; /* managed buffer */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
61 Py_hash_t hash; /* hash value for read-only views */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
62 int flags; /* state flags */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
63 Py_ssize_t exports; /* number of buffer re-exports */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
64 Py_buffer view; /* private copy of the exporter's view */
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
65 char format[_Py_MEMORYVIEW_MAX_FORMAT]; /* used for casting */
77213
bc0281f85409 Issue #14930: Make memoryview objects weakrefable.
Richard Oudkerk <shibturn@gmail.com>
parents: 75254
diff changeset
66 PyObject *weakreflist;
75254
3f9b3b6f7ff0 - Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents: 73669
diff changeset
67 Py_ssize_t ob_array[1]; /* shape, strides, suboffsets */
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
68 } PyMemoryViewObject;
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 65944
diff changeset
69 #endif
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
70
42665
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
71 #ifdef __cplusplus
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
72 }
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
73 #endif
85c22b4d4455 Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
diff changeset
74 #endif /* !Py_MEMORYOBJECT_H */