diff options
| author | Tyge Løvset <[email protected]> | 2021-04-27 20:44:11 +0200 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2021-04-27 20:44:11 +0200 |
| commit | 1faeef377e0298df3e6d765c08c2eeb02f45757a (patch) | |
| tree | 82d5fedce2cade18d8010e788e736054574eeb4b | |
| parent | c0bdaa745f2367812bc72290d6b7dfe2a1a149fe (diff) | |
| download | STC-modified-1faeef377e0298df3e6d765c08c2eeb02f45757a.tar.gz STC-modified-1faeef377e0298df3e6d765c08c2eeb02f45757a.zip | |
Renamed carray struct member at to data. Improved cdeq_expand_() method.
| -rw-r--r-- | docs/carray_api.md | 28 | ||||
| -rw-r--r-- | examples/complex.c | 6 | ||||
| -rw-r--r-- | examples/demos.c | 10 | ||||
| -rw-r--r-- | stc/carray.h | 58 | ||||
| -rw-r--r-- | stc/cdeq.h | 7 |
5 files changed, 55 insertions, 54 deletions
diff --git a/docs/carray_api.md b/docs/carray_api.md index 182ba22f..3fbd8c37 100644 --- a/docs/carray_api.md +++ b/docs/carray_api.md @@ -59,16 +59,16 @@ void carray3X_next(carray3X_iter_t* it); ``` ## Types -| Type name | Type definition | Used to represent... | -|:---------------------|:-------------------------------------------------|:--------------------------| -| `carray2X` | `struct { Value **at; size_t xdim,ydim; }` | The carray2 type | -| `carray2X_value_t` | `Value` | The value type | -| `carray2X_iter_t` | `struct { Value *ref; }` | Iterator type | -| `carray3X` | `struct { Value ***at; size_t xdim,ydim,zdim; }` | The carray3 type | -| `carray3X_value_t` | `Value` | The value type | -| `carray3X_iter_t` | `struct { Value *ref; }` | Iterator type | +| Type name | Type definition | Used to represent... | +|:---------------------|:---------------------------------------------------|:--------------------------| +| `carray2X` | `struct { Value **data; size_t xdim,ydim; }` | The carray2 type | +| `carray2X_value_t` | `Value` | The value type | +| `carray2X_iter_t` | `struct { Value *ref; }` | Iterator type | +| `carray3X` | `struct { Value ***data; size_t xdim,ydim,zdim; }` | The carray3 type | +| `carray3X_value_t` | `Value` | The value type | +| `carray3X_iter_t` | `struct { Value *ref; }` | Iterator type | -The **carray** elements can be accessed like `carray3i arr = ...; int val = arr.at[x][y][z];`, or with `carray3i_at(&arr, x, y, z)`. +The **carray** elements can be accessed like `carray3i arr = ...; int val = arr.data[x][y][z];`, or with `carray3i_at(&arr, x, y, z)`. ## Example ```c @@ -83,14 +83,14 @@ int main() // Ex1 int xd = 30, yd = 20, zd = 10; carray3f a3 = carray3f_init(xd, yd, zd, 0.0f); // define a3[30][20][10], init with 0.0f. - a3.at[5][4][3] = 3.14f; + a3.data[5][4][3] = 3.14f; - float *a1 = a3.at[5][4]; - float **a2 = a3.at[5]; + float *a1 = a3.data[5][4]; + float **a2 = a3.data[5]; printf("%f\n", a1[3]); // 3.14 printf("%f\n", a2[4][3]); // 3.14 - printf("%f\n", a3.at[5][4][3]); // 3.14 + printf("%f\n", a3.data[5][4][3]); // 3.14 carray3f_del(&a3); // free array // Ex2 @@ -103,7 +103,7 @@ int main() } for (int y=0; y<image.ydim; ++y) - image.at[y][y] = 0xffffffff; + image.data[y][y] = 0xffffffff; carray2i_del(&image); } ``` diff --git a/examples/complex.c b/examples/complex.c index 6095a03e..32bbd057 100644 --- a/examples/complex.c +++ b/examples/complex.c @@ -27,7 +27,7 @@ int main() { printf("arr2 size: %zu x %zu\n", arr2.xdim, arr2.ydim);
// Put in some data in 2D array
- arr2.at[x][y] = 3.1415927f;
+ arr2.data[x][y] = 3.1415927f;
clist_arr_push_back(&tableList, arr2);
cmap_lst_insert(&listMap, tableKey, tableList);
cmap_map_insert(&myMap, cstr_from(strKey), listMap);
@@ -37,8 +37,8 @@ int main() { clist_arr* lsta = &cmap_lst_find(mapl, tableKey).ref->second;
carray2f arr = *clist_arr_back(lsta);
- printf("value (%d, %d) is: %f\n", x, y, arr.at[x][y]);
+ printf("value (%d, %d) is: %f\n", x, y, arr.data[x][y]);
- arr2.at[x][y] = 1.41421356f; // change the value in array
+ arr2.data[x][y] = 1.41421356f; // change the value in array
cmap_map_del(&myMap); // free up everything!
}
diff --git a/examples/demos.c b/examples/demos.c index 1eb74525..286c2e79 100644 --- a/examples/demos.c +++ b/examples/demos.c @@ -185,20 +185,20 @@ void arraydemo1() {
printf("\nARRAYDEMO1\n");
carray3f a3 = carray3f_init(30, 20, 10, 0.0f);
- a3.at[5][4][3] = 10.2f;
- float **a2 = a3.at[5];
- float *a1 = a3.at[5][4];
+ a3.data[5][4][3] = 10.2f;
+ float **a2 = a3.data[5];
+ float *a1 = a3.data[5][4];
printf("a3: %zu: (%zu, %zu, %zu) = %zu\n", sizeof(a3), a3.xdim, a3.ydim, a3.zdim, carray3f_size(a3));
printf("%g\n", a1[3]); // = 10.2
printf("%g\n", a2[4][3]); // = 10.2
- printf("%g\n", a3.at[5][4][3]); // = 10.2
+ printf("%g\n", a3.data[5][4][3]); // = 10.2
float x = 0.0;
c_foreach (i, carray3f, a3)
*i.ref = ++x;
- printf("%g\n", a3.at[29][19][9]); // = 6000
+ printf("%g\n", a3.data[29][19][9]); // = 6000
carray3f_del(&a3);
}
diff --git a/stc/carray.h b/stc/carray.h index b2409155..ebb20321 100644 --- a/stc/carray.h +++ b/stc/carray.h @@ -41,7 +41,7 @@ int main() { for (int x = 0; x < image.xdim; ++x)
for (int y = 0; y < image.ydim; ++y)
- printf(" %d", image.at[x][y]);
+ printf(" %d", image.data[x][y]);
puts("\n");
c_foreach (i, carray2i, image)
@@ -64,7 +64,7 @@ int main() { #define _c_using_carray2(CX, Value, valueDel, valueClone) \
\
typedef Value CX##_value_t; \
- typedef struct { CX##_value_t **at; size_t xdim, ydim; } CX; \
+ typedef struct { CX##_value_t **data; size_t xdim, ydim; } CX; \
typedef struct { CX##_value_t *ref; } CX##_iter_t; \
\
STC_API CX CX##_from(CX##_value_t* block, size_t xdim, size_t ydim); \
@@ -72,19 +72,19 @@ int main() { STC_API CX CX##_clone(CX src); \
\
STC_INLINE size_t CX##_size(CX arr) { return arr.xdim*arr.ydim; } \
- STC_INLINE CX##_value_t *CX##_data(CX* self) { return *self->at; } \
+ STC_INLINE CX##_value_t *CX##_data(CX* self) { return *self->data; } \
STC_INLINE CX##_value_t *CX##_at(CX* self, size_t x, size_t y) { \
- return *self->at + self->ydim*x + y; \
+ return *self->data + self->ydim*x + y; \
} \
STC_INLINE CX##_value_t *CX##_release(CX* self) { \
- CX##_value_t *t = *self->at; c_free(self->at); self->at = NULL; return t; \
+ CX##_value_t *t = *self->data; c_free(self->data); self->data = NULL; return t; \
} \
\
STC_INLINE CX##_iter_t CX##_begin(const CX* self) { \
- CX##_iter_t it = {*self->at}; return it; \
+ CX##_iter_t it = {*self->data}; return it; \
} \
STC_INLINE CX##_iter_t CX##_end(const CX* self) { \
- CX##_iter_t it = {*self->at + CX##_size(*self)}; return it; \
+ CX##_iter_t it = {*self->data + CX##_size(*self)}; return it; \
} \
STC_INLINE void CX##_next(CX##_iter_t* it) { ++it->ref; } \
\
@@ -105,7 +105,7 @@ int main() { #define _c_using_carray3(CX, Value, valueDel, valueClone) \
\
typedef Value CX##_value_t; \
- typedef struct { CX##_value_t ***at; size_t xdim, ydim, zdim; } CX; \
+ typedef struct { CX##_value_t ***data; size_t xdim, ydim, zdim; } CX; \
typedef struct { CX##_value_t *ref; } CX##_iter_t; \
\
STC_API CX CX##_from(CX##_value_t* block, size_t xdim, size_t ydim, size_t zdim); \
@@ -113,19 +113,19 @@ int main() { STC_API CX CX##_clone(CX src); \
\
STC_INLINE size_t CX##_size(CX arr) { return arr.xdim*arr.ydim*arr.zdim; } \
- STC_INLINE CX##_value_t *CX##_data(CX* self) { return **self->at; } \
+ STC_INLINE CX##_value_t *CX##_data(CX* self) { return **self->data; } \
STC_INLINE CX##_value_t *CX##_at(CX* self, size_t x, size_t y, size_t z) { \
- return **self->at + self->zdim*(self->ydim*x + y) + z; \
+ return **self->data + self->zdim*(self->ydim*x + y) + z; \
} \
STC_INLINE CX##_value_t *CX##_release(CX* self) { \
- CX##_value_t *t = **self->at; c_free(self->at); self->at = NULL; return t; \
+ CX##_value_t *t = **self->data; c_free(self->data); self->data = NULL; return t; \
} \
\
STC_INLINE CX##_iter_t CX##_begin(const CX* self) { \
- CX##_iter_t it = {**self->at}; return it; \
+ CX##_iter_t it = {**self->data}; return it; \
} \
STC_INLINE CX##_iter_t CX##_end(const CX* self) { \
- CX##_iter_t it = {**self->at + CX##_size(*self)}; return it; \
+ CX##_iter_t it = {**self->data + CX##_size(*self)}; return it; \
} \
STC_INLINE void CX##_next(CX##_iter_t* it) { ++it->ref; } \
\
@@ -142,14 +142,14 @@ int main() { size_t n = xdim * ydim; \
CX _arr = {c_new_n(CX##_value_t*, xdim), xdim, ydim}; \
for (size_t x = 0; x < xdim; ++x, block += ydim) \
- _arr.at[x] = block; \
+ _arr.data[x] = block; \
return _arr; \
} \
\
STC_DEF CX CX##_init(size_t xdim, size_t ydim, Value value) { \
size_t n = xdim*ydim; \
CX _arr = CX##_from(c_new_n(CX##_value_t, n), xdim, ydim); \
- for (CX##_value_t* p = _arr.at[0], *e = p + n; p != e; ++p) \
+ for (CX##_value_t* p = _arr.data[0], *e = p + n; p != e; ++p) \
*p = value; \
return _arr; \
} \
@@ -157,17 +157,17 @@ int main() { STC_DEF CX CX##_clone(CX src) { \
size_t n = src.xdim*src.ydim; \
CX _arr = CX##_from(c_new_n(CX##_value_t, n), src.xdim, src.ydim); \
- for (CX##_value_t* p = _arr.at[0], *q = src.at[0], *e = p + n; p != e; ++p, ++q) \
+ for (CX##_value_t* p = _arr.data[0], *q = src.data[0], *e = p + n; p != e; ++p, ++q) \
*p = valueClone(*q); \
return _arr; \
} \
\
STC_DEF void CX##_del(CX* self) { \
- if (!self->at) return; \
- for (CX##_value_t* p = self->at[0], *e = p + self->xdim*self->ydim; p != e; ++p) \
+ if (!self->data) return; \
+ for (CX##_value_t* p = self->data[0], *e = p + self->xdim*self->ydim; p != e; ++p) \
valueDel(p); \
- c_free(self->at[0]); /* data */ \
- c_free(self->at); \
+ c_free(self->data[0]); /* data */ \
+ c_free(self->data); \
}
// carray3 impl.
@@ -176,17 +176,17 @@ int main() { \
STC_DEF CX CX##_from(CX##_value_t* block, size_t xdim, size_t ydim, size_t zdim) { \
CX _arr = {c_new_n(CX##_value_t**, xdim*(ydim + 1)), xdim, ydim, zdim}; \
- CX##_value_t** p = (CX##_value_t**) &_arr.at[xdim]; \
+ CX##_value_t** p = (CX##_value_t**) &_arr.data[xdim]; \
for (size_t x = 0, y; x < xdim; ++x, p += ydim) \
- for (_arr.at[x] = p, y = 0; y < ydim; ++y, block += zdim) \
- _arr.at[x][y] = block; \
+ for (_arr.data[x] = p, y = 0; y < ydim; ++y, block += zdim) \
+ _arr.data[x][y] = block; \
return _arr; \
} \
\
STC_DEF CX CX##_init(size_t xdim, size_t ydim, size_t zdim, Value value) { \
size_t n = xdim*ydim*zdim; \
CX _arr = CX##_from(c_new_n(CX##_value_t, n), xdim, ydim, zdim); \
- for (CX##_value_t* p = **_arr.at, *e = p + n; p != e; ++p) \
+ for (CX##_value_t* p = **_arr.data, *e = p + n; p != e; ++p) \
*p = value; \
return _arr; \
} \
@@ -194,17 +194,17 @@ int main() { STC_DEF CX CX##_clone(CX src) { \
size_t n = CX##_size(src); \
CX _arr = CX##_from(c_new_n(CX##_value_t, n), src.xdim, src.ydim, src.zdim); \
- for (CX##_value_t* p = **_arr.at, *q = **src.at, *e = p + n; p != e; ++p, ++q) \
+ for (CX##_value_t* p = **_arr.data, *q = **src.data, *e = p + n; p != e; ++p, ++q) \
*p = valueClone(*q); \
return _arr; \
} \
\
STC_DEF void CX##_del(CX* self) { \
- if (!self->at) return; \
- for (CX##_value_t* p = **self->at, *e = p + CX##_size(*self); p != e; ++p) \
+ if (!self->data) return; \
+ for (CX##_value_t* p = **self->data, *e = p + CX##_size(*self); p != e; ++p) \
valueDel(p); \
- c_free(self->at[0][0]); /* data */ \
- c_free(self->at); /* pointers */ \
+ c_free(self->data[0][0]); /* data */ \
+ c_free(self->data); /* pointers */ \
}
#else
@@ -232,9 +232,10 @@ static struct cdeq_rep _cdeq_inits = {0, 0}; self->_base = (CX##_value_t *) rep->base; \
self->data = self->_base + nfront; \
} \
- size_t unused = cap - (len + n), pos = unused/2; \
- if (!at_front && nfront < pos) return; \
- if (at_front && nback < pos) pos = unused - nback; \
+ size_t unused = cap - len, pos = unused/2; \
+ if (at_front) { if (len == 0) pos = unused; \
+ else if (nback < pos) pos = unused - nback; } \
+ else if (nfront < pos) return; \
self->data = (CX##_value_t *) memmove(self->_base + pos, self->data, len*sizeof(Value)); \
} \
\
|
