annotate Include/memoryobject.h @ 58765:2ba7677bfa95 legacy-trunk

testCopysign was defined twice in test_math; combine the definitions
author Mark Dickinson <dickinsm@gmail.com>
date Sat, 06 Feb 2010 23:11:25 +0000
parents 75efd757434b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52749
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1 /* Memory view object. In Python this is available as "memoryview". */
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
2
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
3 #ifndef Py_MEMORYOBJECT_H
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
4 #define Py_MEMORYOBJECT_H
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
5 #ifdef __cplusplus
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
6 extern "C" {
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
7 #endif
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
8
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
9 PyAPI_DATA(PyTypeObject) PyMemoryView_Type;
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
10
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
11 #define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type)
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
12
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
13 /* Get a pointer to the underlying Py_buffer of a memoryview object. */
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
14 #define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view)
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
15 /* Get a pointer to the PyObject from which originates a memoryview object. */
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
16 #define PyMemoryView_GET_BASE(op) (((PyMemoryViewObject *)(op))->view.obj)
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
17
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
18
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
19 PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
20 int buffertype,
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
21 char fort);
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
22
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
23 /* Return a contiguous chunk of memory representing the buffer
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
24 from an object in a memory view object. If a copy is made then the
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
25 base object for the memory view will be a *new* bytes object.
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
26
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
27 Otherwise, the base-object will be the object itself and no
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
28 data-copying will be done.
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
29
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
30 The buffertype argument can be PyBUF_READ, PyBUF_WRITE,
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
31 PyBUF_SHADOW to determine whether the returned buffer
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
32 should be READONLY, WRITABLE, or set to update the
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
33 original buffer if a copy must be made. If buffertype is
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
34 PyBUF_WRITE and the buffer is not contiguous an error will
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
35 be raised. In this circumstance, the user can use
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
36 PyBUF_SHADOW to ensure that a a writable temporary
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
37 contiguous buffer is returned. The contents of this
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
38 contiguous buffer will be copied back into the original
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
39 object after the memoryview object is deleted as long as
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
40 the original object is writable and allows setting an
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
41 exclusive write lock. If this is not allowed by the
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
42 original object, then a BufferError is raised.
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
43
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
44 If the object is multi-dimensional and if fortran is 'F',
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
45 the first dimension of the underlying array will vary the
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
46 fastest in the buffer. If fortran is 'C', then the last
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
47 dimension will vary the fastest (C-style contiguous). If
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
48 fortran is 'A', then it does not matter and you will get
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
49 whatever the object decides is more efficient.
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
50
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
51 A new reference is returned that must be DECREF'd when finished.
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
52 */
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
53
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
54 PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base);
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
55
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
56 PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info);
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
57 /* create new if bufptr is NULL
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
58 will be a new bytesobject in base */
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
59
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
60
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
61 /* The struct is declared here so that macros can work, but it shouldn't
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
62 be considered public. Don't access those fields directly, use the macros
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
63 and functions instead! */
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
64 typedef struct {
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
65 PyObject_HEAD
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
66 PyObject *base;
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
67 Py_buffer view;
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
68 } PyMemoryViewObject;
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
69
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
70
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
71 #ifdef __cplusplus
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
72 }
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
73 #endif
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
74 #endif /* !Py_MEMORYOBJECT_H */