summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTylo <[email protected]>2020-06-25 09:08:53 +0200
committerTylo <[email protected]>2020-06-25 09:08:53 +0200
commit7742fc40ef868260b7120d7269865d38014a0a41 (patch)
tree4a5c346a43ff238dbbbcd7ca112deb71dbc53651
parent2a50ec5a05a15c022d59ee4e731ef4ab97aed056 (diff)
downloadSTC-modified-7742fc40ef868260b7120d7269865d38014a0a41.tar.gz
STC-modified-7742fc40ef868260b7120d7269865d38014a0a41.zip
Updated carray.h: renamed carray_xdim to separate carray1_xdim, carray2_xdim, etc. Added complex.c example.
-rw-r--r--examples/complex.c36
-rw-r--r--stc/carray.h33
2 files changed, 55 insertions, 14 deletions
diff --git a/examples/complex.c b/examples/complex.c
new file mode 100644
index 00000000..3fb0f0a1
--- /dev/null
+++ b/examples/complex.c
@@ -0,0 +1,36 @@
+#include "../stc/cstring.h"
+#include "../stc/chash.h"
+#include "../stc/clist.h"
+#include "../stc/carray.h"
+
+void check_destroy(float* v) {printf("destroy %g\n", *v);}
+
+declare_CArray(f, float, check_destroy); // normally omit the last argument - float type need no destroy.
+declare_CList(t2, CArray2_f, carray2_f_destroy, c_noCompare);
+declare_CHash(il, MAP, int, CList_t2, clist_t2_destroy);
+declare_CHash_string(sm, MAP, CHash_il, chash_il_destroy);
+
+int main() {
+ int xdim = 4, ydim = 6;
+ int x = 1, y = 5, entry = 42;
+ CHash_sm theMap = chash_init;
+ {
+ // Construct.
+ CArray2_f table = carray2_f_make(ydim, xdim, 0.f);
+ printf("table: (%zu, %zu)\n", carray2_ydim(table), carray2_xdim(table));
+ CList_t2 tableList = clist_init;
+ CHash_il listMap = chash_init;
+
+ // Put in some data.
+ carray2_f_data(table, y)[x] = 3.1415927; // table[x][y]
+ clist_t2_pushBack(&tableList, table);
+ chash_il_put(&listMap, entry, tableList);
+ chash_sm_put(&theMap, "First", listMap);
+ }
+
+ // Access the data entry
+ CArray2_f table = clist_back(chash_il_get(&chash_sm_get(&theMap, "First")->value, entry)->value);
+ printf("value (%d, %d) is: %f\n", y, x, carray2_f_value(table, y, x));
+
+ chash_sm_destroy(&theMap); // free up the whole shebang!
+} \ No newline at end of file
diff --git a/stc/carray.h b/stc/carray.h
index b39bb35c..d56aee58 100644
--- a/stc/carray.h
+++ b/stc/carray.h
@@ -44,22 +44,27 @@ int main()
printf("%f\n", carray3_f_data(a3, 5, 4)[3]);
printf("%f\n", carray3_f_at2(a3, 5, 4).data[3]);
- carray_f_destroy(&a2); // does nothing, since it is a sub-array.
- carray_f_destroy(&a3); // also invalidates a2.
+ carray2_f_destroy(&a2); // does nothing, since it is a sub-array.
+ carray3_f_destroy(&a3); // also invalidates a2.
}
*/
-#define carray_xdim(a) ((a)._xdim & _carray_sub)
-#define carray_ydim(a) _carray_ydim(&(a)._yxdim)
-#define carray_zdim(a) ((a)._zdim)
-#define carray1_size(a) carray_xdim(a)
+#define carray1_xdim(a) ((a)._xdim & _carray_sub)
+#define carray1_size(a) carray1_xdim(a)
+
+#define carray2_xdim(a) carray1_xdim(a)
+#define carray2_ydim(a) _carray2_ydim(&(a)._yxdim)
#define carray2_size(a) ((a)._yxdim)
+
+#define carray3_xdim(a) carray1_xdim(a)
+#define carray3_ydim(a) carray2_ydim(a)
+#define carray3_zdim(a) ((a)._zdim)
#define carray3_size(a) _carray3_size(&(a)._zdim)
#define _carray_sub (SIZE_MAX >> 1)
#define _carray_own (_carray_sub + 1)
-static inline size_t _carray_ydim(const size_t* yxdim) {
+static inline size_t _carray2_ydim(const size_t* yxdim) {
return yxdim[0] / (yxdim[-1] & _carray_sub);
}
static inline size_t _carray3_size(const size_t* zdim) {
@@ -137,35 +142,35 @@ static inline size_t _carray3_size(const size_t* zdim) {
\
static inline CArray1_##tag \
carray2_##tag##_at(CArray2_##tag a, size_t y) { \
- CArray1_##tag sub = {a.data + y*carray_xdim(a), carray_xdim(a)}; \
+ CArray1_##tag sub = {a.data + y*carray2_xdim(a), carray2_xdim(a)}; \
return sub; \
} \
static inline Value* \
carray2_##tag##_data(CArray2_##tag a, size_t y) { \
- return a.data + y*carray_xdim(a); \
+ return a.data + y*carray2_xdim(a); \
} \
static inline Value \
carray2_##tag##_value(CArray2_##tag a, size_t y, size_t x) { \
- return a.data[ y*carray_xdim(a) + x ]; \
+ return a.data[ y*carray2_xdim(a) + x ]; \
} \
\
static inline CArray2_##tag \
carray3_##tag##_at(CArray3_##tag a, size_t z) { \
- CArray2_##tag sub = {a.data + z*a._yxdim, carray_xdim(a), a._yxdim}; \
+ CArray2_##tag sub = {a.data + z*a._yxdim, carray3_xdim(a), a._yxdim}; \
return sub; \
} \
static inline CArray1_##tag \
carray3_##tag##_at2(CArray3_##tag a, size_t z, size_t y) { \
- CArray1_##tag sub = {a.data + z*a._yxdim + y*carray_xdim(a), carray_xdim(a)}; \
+ CArray1_##tag sub = {a.data + z*a._yxdim + y*carray3_xdim(a), carray3_xdim(a)}; \
return sub; \
} \
static inline Value* \
carray3_##tag##_data(CArray3_##tag a, size_t z, size_t y) { \
- return a.data + z*a._yxdim + y*carray_xdim(a); \
+ return a.data + z*a._yxdim + y*carray3_xdim(a); \
} \
static inline Value \
carray3_##tag##_value(CArray3_##tag a, size_t z, size_t y, size_t x) { \
- return a.data[ z*a._yxdim + y*carray_xdim(a) + x ]; \
+ return a.data[ z*a._yxdim + y*carray3_xdim(a) + x ]; \
} \
typedef Value CArrayValue_##tag