summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge <[email protected]>2020-04-15 16:02:48 +0200
committerTyge <[email protected]>2020-04-15 16:02:48 +0200
commitc9db6edd7b173e9d37ea0463d6bdd4076dccbfd6 (patch)
tree69fee1a89c192c6c15624427bfba42056cbe2d1a
parent466173620bf5775f2ce77beb7b9fd45e8d1ee78a (diff)
downloadSTC-modified-c9db6edd7b173e9d37ea0463d6bdd4076dccbfd6.tar.gz
STC-modified-c9db6edd7b173e9d37ea0463d6bdd4076dccbfd6.zip
Last update.
-rw-r--r--stc/carray.h36
1 files changed, 19 insertions, 17 deletions
diff --git a/stc/carray.h b/stc/carray.h
index e8e7e5ba..5d136e87 100644
--- a/stc/carray.h
+++ b/stc/carray.h
@@ -33,17 +33,19 @@ declare_CArray(f, float);
int main()
{
CArray3f a3 = carray3f_make(30, 20, 10);
- carray3f_at2(a3, 5, 4).data[3] = 10.2f;
+ carray3f_data(a3, 5, 4)[3] = 10.2f;
CArray2f a2 = carray3f_at(a3, 5);
- printf("%f\n", carray3f_at2(a3, 5, 4).data[3]);
- printf("%f\n", carray3f_at3(a3, 5, 4, 3));
- printf("%f\n", carray2f_at(a2, 4).data[3]);
+ printf("%f\n", carray2f_value(a2, 4, 3));
printf("%f\n", carray2f_data(a2, 4)[3]);
- printf("%f\n", carray2f_at2(a2, 4, 3));
+ printf("%f\n", carray2f_at(a2, 4).data[3]);
+
+ printf("%f\n", carray3f_value(a3, 5, 4, 3));
+ printf("%f\n", carray3f_data(a3, 5, 4)[3]);
+ printf("%f\n", carray3f_at2(a3, 5, 4).data[3]);
- carray_unref(a2);
carray_unref(a3);
+ carray_unref(a2);
}
*/
@@ -51,7 +53,7 @@ int main()
#define carray_ydim(a) ((a)._yxdim / (a).xdim)
#define carray_zdim(a) ((a).zdim)
#define carray_ref(a) (++(a)._refCount, a)
-#define carray_unref(a) ({if (--(a)._refCount == 0) free((a).data); 0;})
+#define carray_unref(a) (--(a)._refCount == 0 ? free((a).data) : (void)0)
#define declare_CArray(tag, T) \
c_struct (CArray1##tag) { \
@@ -83,23 +85,19 @@ int main()
CArray3##tag a = {c_new_2(T, zdim*ydim*xdim), 1, xdim, ydim*xdim, zdim}; return a; \
} \
\
- static inline T* \
- carray2##tag##_data(CArray2##tag a, size_t y) { \
- return a.data + y*a.xdim; \
- } \
static inline CArray1##tag \
carray2##tag##_at(CArray2##tag a, size_t y) { \
CArray1##tag out = {a.data + y*a.xdim, 1000, a.xdim}; return out; \
} \
+ static inline T* \
+ carray2##tag##_data(CArray2##tag a, size_t y) { \
+ return a.data + y*a.xdim; \
+ } \
static inline T \
- carray2##tag##_at2(CArray2##tag a, size_t y, size_t x) { \
+ carray2##tag##_value(CArray2##tag a, size_t y, size_t x) { \
return a.data[ y*a.xdim + x ]; \
} \
\
- static inline T* \
- carray3##tag##_data(CArray3##tag a, size_t z, size_t y) { \
- return a.data + z*a._yxdim + y*a.xdim; \
- } \
static inline CArray2##tag \
carray3##tag##_at(CArray3##tag a, size_t z) { \
CArray2##tag out = {a.data + z*a._yxdim, 1000, a.xdim, a._yxdim}; return out; \
@@ -108,8 +106,12 @@ int main()
carray3##tag##_at2(CArray3##tag a, size_t z, size_t y) { \
CArray1##tag out = {a.data + z*a._yxdim + y*a.xdim, 1000, a.xdim}; return out; \
} \
+ static inline T* \
+ carray3##tag##_data(CArray3##tag a, size_t z, size_t y) { \
+ return a.data + z*a._yxdim + y*a.xdim; \
+ } \
static inline T \
- carray3##tag##_at3(CArray3##tag a, size_t z, size_t y, size_t x) { \
+ carray3##tag##_value(CArray3##tag a, size_t z, size_t y, size_t x) { \
return a.data[ z*a._yxdim + y*a.xdim + x ]; \
} \
typedef T carray_##tag##_t