summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wiebe <mwwiebe@gmail.com>2011-01-07 20:24:25 -0800
committerMark Wiebe <mwwiebe@gmail.com>2011-01-09 01:55:04 -0800
commit96182f80edb4b7fc251f542317642f49027a5126 (patch)
treea91dfbd33110dcac6e093ea21eda4aa4da9be33f
parent595d4530fb7c1957f173da1da1a00ea8714c1832 (diff)
downloadnumpy-96182f80edb4b7fc251f542317642f49027a5126.tar.gz
ENH: iter: Add access functions for some buffering properties
-rw-r--r--numpy/core/code_generators/numpy_api.py21
-rw-r--r--numpy/core/src/multiarray/new_iterator.c.src38
2 files changed, 50 insertions, 9 deletions
diff --git a/numpy/core/code_generators/numpy_api.py b/numpy/core/code_generators/numpy_api.py
index a5d6def23..b6641fc6c 100644
--- a/numpy/core/code_generators/numpy_api.py
+++ b/numpy/core/code_generators/numpy_api.py
@@ -279,15 +279,18 @@ multiarray_funcs_api = {
'NpyIter_GotoCoords': 245,
'NpyIter_RemoveCoords': 246,
'NpyIter_HasIndex': 247,
- 'NpyIter_GetIndexPtr': 248,
- 'NpyIter_GotoIndex': 249,
- 'NpyIter_GetDataPtrArray': 250,
- 'NpyIter_GetDescrArray': 251,
- 'NpyIter_GetObjectArray': 252,
- 'NpyIter_GetIterView': 253,
- 'NpyIter_GetReadFlags': 254,
- 'NpyIter_GetWriteFlags': 255,
- 'NpyIter_DebugPrint': 256,
+ 'NpyIter_IsBuffered': 248,
+ 'NpyIter_IsGrowInner': 249,
+ 'NpyIter_GetBufferSize': 250,
+ 'NpyIter_GetIndexPtr': 251,
+ 'NpyIter_GotoIndex': 252,
+ 'NpyIter_GetDataPtrArray': 253,
+ 'NpyIter_GetDescrArray': 254,
+ 'NpyIter_GetObjectArray': 255,
+ 'NpyIter_GetIterView': 256,
+ 'NpyIter_GetReadFlags': 257,
+ 'NpyIter_GetWriteFlags': 258,
+ 'NpyIter_DebugPrint': 259,
}
ufunc_types_api = {
diff --git a/numpy/core/src/multiarray/new_iterator.c.src b/numpy/core/src/multiarray/new_iterator.c.src
index cc6a81be0..221ab615d 100644
--- a/numpy/core/src/multiarray/new_iterator.c.src
+++ b/numpy/core/src/multiarray/new_iterator.c.src
@@ -1748,6 +1748,44 @@ NpyIter_GetIterSize(NpyIter *iter)
}
/*NUMPY_API
+ * Whether the iterator is buffered
+ */
+NPY_NO_EXPORT int
+NpyIter_IsBuffered(NpyIter *iter)
+{
+ return (NIT_ITFLAGS(iter)&NPY_ITFLAG_BUFFER) != 0;
+}
+
+/*NUMPY_API
+ * Whether the inner loop can grow if buffering is unneeded
+ */
+NPY_NO_EXPORT int
+NpyIter_IsGrowInner(NpyIter *iter)
+{
+ return (NIT_ITFLAGS(iter)&NPY_ITFLAG_GROWINNER) != 0;
+}
+
+/*NUMPY_API
+ * Gets the size of the buffer, or 0 if buffering is not enabled
+ */
+NPY_NO_EXPORT npy_intp
+NpyIter_GetBufferSize(NpyIter *iter)
+{
+ npy_uint32 itflags = NIT_ITFLAGS(iter);
+ npy_intp ndim = NIT_NDIM(iter);
+ npy_intp niter = NIT_NITER(iter);
+
+ if (itflags&NPY_ITFLAG_BUFFER) {
+ NpyIter_BufferData *bufferdata = NIT_BUFFERDATA(iter);
+ return NBF_BUFFERSIZE(bufferdata);
+ }
+ else {
+ return 0;
+ }
+
+}
+
+/*NUMPY_API
* Gets the range of iteration indices being iterated
*/
NPY_NO_EXPORT void