diff options
| author | Tylo <[email protected]> | 2020-06-25 09:08:53 +0200 |
|---|---|---|
| committer | Tylo <[email protected]> | 2020-06-25 09:08:53 +0200 |
| commit | 7742fc40ef868260b7120d7269865d38014a0a41 (patch) | |
| tree | 4a5c346a43ff238dbbbcd7ca112deb71dbc53651 | |
| parent | 2a50ec5a05a15c022d59ee4e731ef4ab97aed056 (diff) | |
| download | STC-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.c | 36 | ||||
| -rw-r--r-- | stc/carray.h | 33 |
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
|
