summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKurt Smith <kwsmith1@wisc.edu>2009-08-13 19:47:26 -0500
committerKurt Smith <kwsmith1@wisc.edu>2009-08-13 19:47:26 -0500
commit5ccb6e9a2f5c5ad6d543112dc15b08b7bb0d5da8 (patch)
treebbeee5c635228f401c0a1fabf76e49294459bb47
parentc27a83354c45771de6eb719e8bfccc612c9e5a65 (diff)
downloadcython-5ccb6e9a2f5c5ad6d543112dc15b08b7bb0d5da8.tar.gz
replaced memoryviewslice struct diminfo with shape/strides/suboffsets arrays.
-rw-r--r--Cython/Compiler/MemoryView.py60
1 files changed, 30 insertions, 30 deletions
diff --git a/Cython/Compiler/MemoryView.py b/Cython/Compiler/MemoryView.py
index de7336e02..1e061382d 100644
--- a/Cython/Compiler/MemoryView.py
+++ b/Cython/Compiler/MemoryView.py
@@ -100,7 +100,9 @@ def put_assign_to_memviewslice(lhs_cname, rhs_cname, memviewslicetype, pos, code
code.putln("%s.data = %s.data;" % (lhs_cname, rhs_cname))
ndim = len(memviewslicetype.axes)
for i in range(ndim):
- code.putln("%s.diminfo[%d] = %s.diminfo[%d];" % (lhs_cname, i, rhs_cname, i))
+ code.putln("%s.shape[%d] = %s.shape[%d];" % (lhs_cname, i, rhs_cname, i))
+ code.putln("%s.strides[%d] = %s.strides[%d];" % (lhs_cname, i, rhs_cname, i))
+ code.putln("%s.suboffsets[%d] = %s.suboffsets[%d];" % (lhs_cname, i, rhs_cname, i))
def get_buf_flag(specs):
is_c_contig, is_f_contig = is_cf_contig(specs)
@@ -233,21 +235,21 @@ static int %s(const __Pyx_memviewslice mvs) {
%(for_loop)s {
#ifdef DEBUG
- printf("mvs.diminfo[i].suboffsets %%d\\n", mvs.diminfo[i].suboffsets);
- printf("mvs.diminfo[i].strides %%d\\n", mvs.diminfo[i].strides);
- printf("mvs.diminfo[i].shape %%d\\n", mvs.diminfo[i].shape);
+ printf("mvs.suboffsets[i] %%d\\n", mvs.suboffsets[i]);
+ printf("mvs.strides[i] %%d\\n", mvs.strides[i]);
+ printf("mvs.shape[i] %%d\\n", mvs.shape[i]);
printf("size %%d\\n", size);
printf("ndim %%d\\n", ndim);
#endif
#undef DEBUG
- if(mvs.diminfo[i].suboffsets >= 0) {
+ if(mvs.suboffsets[i] >= 0) {
return 0;
}
- if(size * itemsize != mvs.diminfo[i].strides) {
+ if(size * itemsize != mvs.strides[i]) {
return 0;
}
- size *= mvs.diminfo[i].shape;
+ size *= mvs.shape[i];
}
return 1;
@@ -375,7 +377,7 @@ static int %(cfunc_name)s(const __Pyx_memviewslice *from_mvs, __Pyx_memviewslice
int ndim_idx = 0;
for(ndim_idx=0; ndim_idx<%(ndim)d; ndim_idx++) {
- if(from_mvs->diminfo[ndim_idx].shape != to_mvs->diminfo[ndim_idx].shape) {
+ if(from_mvs->shape[ndim_idx] != to_mvs->shape[ndim_idx]) {
PyErr_Format(PyExc_ValueError,
"memoryview shapes not the same in dimension %%d", ndim_idx);
return -1;
@@ -403,8 +405,8 @@ static int %(cfunc_name)s(const __Pyx_memviewslice *from_mvs, __Pyx_memviewslice
# 'idx' is the same as 'i' for c_contig, and goes from ndim-1 to 0 for f_contig.
# this makes the loop code below identical in both cases.
code_impl += INDENT+"Py_ssize_t i%d = 0, idx%d = 0;\n" % (i,i)
- code_impl += INDENT+"Py_ssize_t stride%(i)d = from_mvs->diminfo[%(idx)d].strides;\n" % {'i':i, 'idx':idx}
- code_impl += INDENT+"Py_ssize_t shape%(i)d = from_mvs->diminfo[%(idx)d].shape;\n" % {'i':i, 'idx':idx}
+ code_impl += INDENT+"Py_ssize_t stride%(i)d = from_mvs->strides[%(idx)d];\n" % {'i':i, 'idx':idx}
+ code_impl += INDENT+"Py_ssize_t shape%(i)d = from_mvs->shape[%(idx)d];\n" % {'i':i, 'idx':idx}
code_impl += "\n"
@@ -427,10 +429,10 @@ static int %(cfunc_name)s(const __Pyx_memviewslice *from_mvs, __Pyx_memviewslice
code_impl += INDENT+"/* 'f' prefix is for the 'from' memview, 't' prefix is for the 'to' memview */\n"
for i in range(ndim):
code_impl += INDENT+"char *fi%d = 0, *ti%d = 0, *end%d = 0;\n" % (i,i,i)
- code_impl += INDENT+"Py_ssize_t fstride%(i)d = from_mvs->diminfo[%(i)d].strides;\n" % {'i':i}
- code_impl += INDENT+"Py_ssize_t fshape%(i)d = from_mvs->diminfo[%(i)d].shape;\n" % {'i':i}
- code_impl += INDENT+"Py_ssize_t tstride%(i)d = to_mvs->diminfo[%(i)d].strides;\n" % {'i':i}
- # code_impl += INDENT+"Py_ssize_t tshape%(i)d = to_mvs->diminfo[%(i)d].shape;\n" % {'i':i}
+ code_impl += INDENT+"Py_ssize_t fstride%(i)d = from_mvs->strides[%(i)d];\n" % {'i':i}
+ code_impl += INDENT+"Py_ssize_t fshape%(i)d = from_mvs->shape[%(i)d];\n" % {'i':i}
+ code_impl += INDENT+"Py_ssize_t tstride%(i)d = to_mvs->strides[%(i)d];\n" % {'i':i}
+ # code_impl += INDENT+"Py_ssize_t tshape%(i)d = to_mvs->shape[%(i)d];\n" % {'i':i}
code_impl += INDENT+"end0 = fshape0 * fstride0 + from_mvs->data;\n"
code_impl += INDENT+"for(fi0=from_buf, ti0=to_buf; fi0 < end0; fi0 += fstride0, ti0 += tstride0) {\n"
@@ -444,7 +446,7 @@ static int %(cfunc_name)s(const __Pyx_memviewslice *from_mvs, __Pyx_memviewslice
for k in range(ndim-1, -1, -1):
code_impl += INDENT*(k+1)+"}\n"
- # init to_mvs->data and to_mvs->diminfo.
+ # init to_mvs->data and to_mvs shape/strides/suboffsets arrays.
code_impl += INDENT+"temp_memview = to_mvs->memview;\n"
code_impl += INDENT+"temp_data = to_mvs->data;\n"
code_impl += INDENT+"to_mvs->memview = 0; to_mvs->data = 0;\n"
@@ -766,18 +768,16 @@ memviewslice_declare_code = UtilityCode(proto="""
/* memoryview slice struct */
typedef struct {
- Py_ssize_t shape, strides, suboffsets;
-} __Pyx_mv_DimInfo;
-
-typedef struct {
- struct %s *memview;
+ struct %(memview_struct_name)s *memview;
char *data;
- __Pyx_mv_DimInfo diminfo[%d];
-} %s;
-
-""" % (CythonScope.memview_objstruct_cname,
- Options.buffer_max_dims,
- memviewslice_cname)
+ Py_ssize_t shape[%(max_dims)d];
+ Py_ssize_t strides[%(max_dims)d];
+ Py_ssize_t suboffsets[%(max_dims)d];
+} %(memviewslice_name)s;
+
+""" % dict(memview_struct_name=CythonScope.memview_objstruct_cname,
+ max_dims=Options.buffer_max_dims,
+ memviewslice_name=memviewslice_cname)
)
memviewslice_init_code = UtilityCode(proto="""\
@@ -953,12 +953,12 @@ static int __Pyx_init_memviewslice(
}
for(i=0; i<ndim; i++) {
- memviewslice->diminfo[i].strides = buf->strides[i];
- memviewslice->diminfo[i].shape = buf->shape[i];
+ memviewslice->strides[i] = buf->strides[i];
+ memviewslice->shape[i] = buf->shape[i];
if(buf->suboffsets) {
- memviewslice->diminfo[i].suboffsets = buf->suboffsets[i];
+ memviewslice->suboffsets[i] = buf->suboffsets[i];
} else {
- memviewslice->diminfo[i].suboffsets = -1;
+ memviewslice->suboffsets[i] = -1;
}
}