From 1faeef377e0298df3e6d765c08c2eeb02f45757a Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Tue, 27 Apr 2021 20:44:11 +0200 Subject: Renamed carray struct member at to data. Improved cdeq_expand_() method. --- docs/carray_api.md | 28 +++++++++++++------------- examples/complex.c | 6 +++--- examples/demos.c | 10 +++++----- stc/carray.h | 58 +++++++++++++++++++++++++++--------------------------- 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; ysecond; 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 diff --git a/stc/cdeq.h b/stc/cdeq.h index ffbb310b..b122248a 100644 --- a/stc/cdeq.h +++ b/stc/cdeq.h @@ -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)); \ } \ \ -- cgit v1.2.3