summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-04-27 20:44:11 +0200
committerTyge Løvset <[email protected]>2021-04-27 20:44:11 +0200
commit1faeef377e0298df3e6d765c08c2eeb02f45757a (patch)
tree82d5fedce2cade18d8010e788e736054574eeb4b
parentc0bdaa745f2367812bc72290d6b7dfe2a1a149fe (diff)
downloadSTC-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.md28
-rw-r--r--examples/complex.c6
-rw-r--r--examples/demos.c10
-rw-r--r--stc/carray.h58
-rw-r--r--stc/cdeq.h7
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
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)); \
} \
\