diff options
author | Travis E. Oliphant <oliphant@enthought.com> | 2007-10-12 23:27:53 (GMT) |
---|---|---|
committer | Travis E. Oliphant <oliphant@enthought.com> | 2007-10-12 23:27:53 (GMT) |
commit | fe9bed02e430613f95849fa49aaa4f823a762738 (patch) | |
tree | f26a61380fcfda85caaaf70f55e74c75c5a0b90f /Include | |
parent | 9b30784ab2867bcb7335add7306bbd71e2de2151 (diff) | |
download | cpython-fe9bed02e430613f95849fa49aaa4f823a762738.zip cpython-fe9bed02e430613f95849fa49aaa4f823a762738.tar.gz cpython-fe9bed02e430613f95849fa49aaa4f823a762738.tar.bz2 |
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.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/memoryobject.h | 61 | ||||
-rw-r--r-- | Include/object.h | 16 |
2 files changed, 42 insertions, 35 deletions
diff --git a/Include/memoryobject.h b/Include/memoryobject.h index 4426cd8..8709da5 100644 --- a/Include/memoryobject.h +++ b/Include/memoryobject.h @@ -8,9 +8,9 @@ extern "C" { #endif typedef struct { - PyObject_HEAD - PyObject *base; - Py_buffer view; + PyObject_HEAD + PyObject *base; + Py_buffer view; } PyMemoryViewObject; @@ -21,39 +21,40 @@ PyAPI_DATA(PyTypeObject) PyMemoryView_Type; #define Py_END_OF_MEMORY (-1) -PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base, int buffertype, - char fort); +PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base, + int buffertype, + char fort); /* Return a contiguous chunk of memory representing the buffer from an object in a memory view object. If a copy is made then the - base object for the memory view will be a *new* bytes object. - - Otherwise, the base-object will be the object itself and no - data-copying will be done. + base object for the memory view will be a *new* bytes object. + + Otherwise, the base-object will be the object itself and no + data-copying will be done. - The buffertype argument can be PyBUF_READ, PyBUF_WRITE, - PyBUF_UPDATEIFCOPY to determine whether the returned buffer - should be READONLY, WRITABLE, or set to update the - original buffer if a copy must be made. If buffertype is - PyBUF_WRITE and the buffer is not contiguous an error will - be raised. In this circumstance, the user can use - PyBUF_UPDATEIFCOPY to ensure that a a writable temporary - contiguous buffer is returned. The contents of this - contiguous buffer will be copied back into the original - object after the memoryview object is deleted as long as - the original object is writable and allows setting its - memory to "readonly". If this is not allowed by the - original object, then a BufferError is raised. + The buffertype argument can be PyBUF_READ, PyBUF_WRITE, + PyBUF_SHADOW to determine whether the returned buffer + should be READONLY, WRITABLE, or set to update the + original buffer if a copy must be made. If buffertype is + PyBUF_WRITE and the buffer is not contiguous an error will + be raised. In this circumstance, the user can use + PyBUF_SHADOW to ensure that a a writable temporary + contiguous buffer is returned. The contents of this + contiguous buffer will be copied back into the original + object after the memoryview object is deleted as long as + the original object is writable and allows setting an + exclusive write lock. If this is not allowed by the + original object, then a BufferError is raised. - If the object is multi-dimensional and if fortran is 'F', - the first dimension of the underlying array will vary the - fastest in the buffer. If fortran is 'C', then the last - dimension will vary the fastest (C-style contiguous). If - fortran is 'A', then it does not matter and you will get - whatever the object decides is more efficient. + If the object is multi-dimensional and if fortran is 'F', + the first dimension of the underlying array will vary the + fastest in the buffer. If fortran is 'C', then the last + dimension will vary the fastest (C-style contiguous). If + fortran is 'A', then it does not matter and you will get + whatever the object decides is more efficient. - A new reference is returned that must be DECREF'd when finished. - */ + A new reference is returned that must be DECREF'd when finished. + */ PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base); diff --git a/Include/object.h b/Include/object.h index 88a3b84..c9d2217 100644 --- a/Include/object.h +++ b/Include/object.h @@ -164,7 +164,7 @@ typedef void (*releasebufferproc)(PyObject *, Py_buffer *); #define PyBUF_WRITABLE 0x0002 /* we used to include an E, backwards compatible alias */ #define PyBUF_WRITEABLE PyBUF_WRITABLE -#define PyBUF_LOCKDATA 0x0004 +#define PyBUF_LOCK 0x0004 #define PyBUF_FORMAT 0x0008 #define PyBUF_ND 0x0010 #define PyBUF_STRIDES (0x0020 | PyBUF_ND) @@ -175,19 +175,25 @@ typedef void (*releasebufferproc)(PyObject *, Py_buffer *); #define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE) #define PyBUF_CONTIG_RO (PyBUF_ND) -#define PyBUF_CONTIG_LCK (PyBUF_ND | PyBUF_LOCKDATA) +#define PyBUF_CONTIG_LCK (PyBUF_ND | PyBUF_LOCK) +#define PyBUF_CONTIG_XLCK (PyBUF_ND | PyBUF_LOCK | PyBUF_WRITABLE) #define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE) #define PyBUF_STRIDED_RO (PyBUF_STRIDES) -#define PyBUF_STRIDED_LCK (PyBUF_STRIDES | PyBUF_LOCKDATA) +#define PyBUF_STRIDED_LCK (PyBUF_STRIDES | PyBUF_LOCK) +#define PyBUF_STRIDED_XLCK (PyBUF_STRIDES | PyBUF_LOCK | PyBUF_WRITABLE) #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT) #define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT) -#define PyBUF_RECORDS_LCK (PyBUF_STRIDES | PyBUF_LOCKDATA | PyBUF_FORMAT) +#define PyBUF_RECORDS_LCK (PyBUF_STRIDES | PyBUF_LOCK | PyBUF_FORMAT) +#define PyBUF_RECORDS_XLCK (PyBUF_STRIDES | PyBUF_LOCK | PyBUF_WRITABLE \ + | PyBUF_FORMAT) #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT) #define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT) -#define PyBUF_FULL_LCK (PyBUF_INDIRECT | PyBUF_LOCKDATA | PyBUF_FORMAT) +#define PyBUF_FULL_LCK (PyBUF_INDIRECT | PyBUF_LOCK | PyBUF_FORMAT) +#define PyBUF_FULL_XLCK (PyBUF_INDIRECT | PyBUF_LOCK | PyBUF_WRITABLE \ + | PyBUF_FORMAT) #define PyBUF_READ 0x100 |