annotate Include/memoryobject.h @ 73798:6cde416ef03b

Credit Per Øyvind Karlsen for the initial implementation of the lzma module (issue #6715).
author Nadeem Vawda <nadeem.vawda@gmail.com>
date Thu, 01 Dec 2011 01:18:27 +0200
parents 215690b782f8
children 3f9b3b6f7ff0
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
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
9 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
10
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
11 #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
12
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 65944
diff changeset
13 #ifndef Py_LIMITED_API
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
14 /* Get a pointer to the underlying Py_buffer of a memoryview object. */
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
15 #define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view)
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
16 /* Get a pointer to the PyObject from which originates a memoryview object. */
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
17 #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
18 #endif
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
19
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
20
43550
4ea945cbbb6d Fix problems with memoryview object. There is still more to do to finish PEP 3118. The memory-view object needs to be fleshed out and the struct module needs to be modified.
Travis E. Oliphant <oliphant@enthought.com>
parents: 43423
diff changeset
21 PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
4ea945cbbb6d Fix problems with memoryview object. There is still more to do to finish PEP 3118. The memory-view object needs to be fleshed out and the struct module needs to be modified.
Travis E. Oliphant <oliphant@enthought.com>
parents: 43423
diff changeset
22 int buffertype,
4ea945cbbb6d Fix problems with memoryview object. There is still more to do to finish PEP 3118. The memory-view object needs to be fleshed out and the struct module needs to be modified.
Travis E. Oliphant <oliphant@enthought.com>
parents: 43423
diff changeset
23 char fort);
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
24
50501
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
25 /* Return a contiguous chunk of memory representing the buffer
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
26 from an object in a memory view object. If a copy is made then the
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
27 base object for the memory view will be a *new* bytes object.
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
28
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
29 Otherwise, the base-object will be the object itself and no
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
30 data-copying will be done.
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
31
50501
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
32 The buffertype argument can be PyBUF_READ, PyBUF_WRITE,
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
33 PyBUF_SHADOW to determine whether the returned buffer
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
34 should be READONLY, WRITABLE, or set to update the
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
35 original buffer if a copy must be made. If buffertype is
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
36 PyBUF_WRITE and the buffer is not contiguous an error will
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
37 be raised. In this circumstance, the user can use
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
38 PyBUF_SHADOW to ensure that a a writable temporary
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
39 contiguous buffer is returned. The contents of this
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
40 contiguous buffer will be copied back into the original
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
41 object after the memoryview object is deleted as long as
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
42 the original object is writable and allows setting an
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
43 exclusive write lock. If this is not allowed by the
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
44 original object, then a BufferError is raised.
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
45
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
46 If the object is multi-dimensional and if fortran is 'F',
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
47 the first dimension of the underlying array will vary the
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
48 fastest in the buffer. If fortran is 'C', then the last
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
49 dimension will vary the fastest (C-style contiguous). If
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
50 fortran is 'A', then it does not matter and you will get
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
51 whatever the object decides is more efficient.
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
52
50501
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
53 A new reference is returned that must be DECREF'd when finished.
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
54 */
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
55
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
56 PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base);
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
57
67419
8a302a09ee83 Remove buffer API from stable ABI for now, see #10181.
Martin v. Löwis <martin@v.loewis.de>
parents: 66664
diff changeset
58 #ifndef Py_LIMITED_API
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
59 PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info);
50501
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
60 /* create new if bufptr is NULL
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
61 will be a new bytesobject in base */
67419
8a302a09ee83 Remove buffer API from stable ABI for now, see #10181.
Martin v. Löwis <martin@v.loewis.de>
parents: 66664
diff changeset
62 #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
63
50501
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
64
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
65 /* The struct is declared here so that macros can work, but it shouldn't
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
66 be considered public. Don't access those fields directly, use the macros
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
67 and functions instead! */
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 65944
diff changeset
68 #ifndef Py_LIMITED_API
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
69 typedef struct {
50501
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
70 PyObject_HEAD
de2771070d85 Merged revisions 68212 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48770
diff changeset
71 Py_buffer view;
73669
215690b782f8 Issue #13411: memoryview objects are now hashable when the underlying object is hashable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 67419
diff changeset
72 Py_hash_t hash;
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
73 } PyMemoryViewObject;
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 65944
diff changeset
74 #endif
48770
7511f3e672a2 #3560: cleanup C memoryview API
Antoine Pitrou <solipsis@pitrou.net>
parents: 44351
diff changeset
75
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
76 #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
77 }
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
78 #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
79 #endif /* !Py_MEMORYOBJECT_H */