summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTylo <[email protected]>2020-06-23 23:16:11 +0200
committerTylo <[email protected]>2020-06-23 23:16:11 +0200
commit4b5c75d1b3c012e657f50b9f58ef57bc6a901758 (patch)
tree22b95e90737a462702d36d2c2a0fccc42a27bc5b
parent2ae6b220cc639ecc9cdfdabfe7be36aa2ed98b15 (diff)
downloadSTC-modified-4b5c75d1b3c012e657f50b9f58ef57bc6a901758.tar.gz
STC-modified-4b5c75d1b3c012e657f50b9f58ef57bc6a901758.zip
Fixed a bug with size_t.
-rw-r--r--stc/carray.h23
1 files changed, 12 insertions, 11 deletions
diff --git a/stc/carray.h b/stc/carray.h
index 214bc976..9537e028 100644
--- a/stc/carray.h
+++ b/stc/carray.h
@@ -49,7 +49,7 @@ int main()
}
*/
-#define carray_xdim(a) ((a)._xdim & ~_carray_own)
+#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)
@@ -57,10 +57,11 @@ int main()
#define carray3_size(a) _carray3_size(&(a)._zdim)
-enum {_carray_own = 1ull << ((sizeof(size_t) << 3) - 1)};
+#define _carray_own (1ull << ((sizeof(size_t) << 3) - 1))
+#define _carray_sub (~_carray_own)
static inline size_t _carray_ydim(const size_t* yxdim) {
- return yxdim[0] / (yxdim[-1] & ~_carray_own);
+ return yxdim[0] / (yxdim[-1] & _carray_sub);
}
static inline size_t _carray3_size(const size_t* zdim) {
return zdim[0] * zdim[-1];
@@ -91,18 +92,18 @@ static inline size_t _carray3_size(const size_t* zdim) {
\
static inline void \
carray1_##tag##_destroy(CArray1_##tag* self) { \
- const size_t n = carray1_size(*self); Value* a = self->data; \
- if (self->_xdim & _carray_own) {for (size_t i=0; i<n; ++i) valueDestroy(&a[i]); free(a);} \
+ size_t n = carray1_size(*self); Value* a = self->data; \
+ if (self->_xdim & _carray_own) {while (n--) valueDestroy(&a[n]); free(a);} \
} \
static inline void \
carray2_##tag##_destroy(CArray2_##tag* self) { \
- const size_t n = carray2_size(*self); Value* a = self->data; \
- if (self->_xdim & _carray_own) {for (size_t i=0; i<n; ++i) valueDestroy(&a[i]); free(a);} \
+ size_t n = carray2_size(*self); Value* a = self->data; \
+ if (self->_xdim & _carray_own) {while (n--) valueDestroy(&a[n]); free(a);} \
} \
static inline void \
carray3_##tag##_destroy(CArray3_##tag* self) { \
- const size_t n = carray3_size(*self); Value* a = self->data; \
- if (self->_xdim & _carray_own) {for (size_t i=0; i<n; ++i) valueDestroy(&a[i]); free(a);} \
+ size_t n = carray3_size(*self); Value* a = self->data; \
+ if (self->_xdim & _carray_own) {while (n--) valueDestroy(&a[n]); free(a);} \
} \
\
static inline CArray1_##tag \
@@ -114,7 +115,7 @@ static inline size_t _carray3_size(const size_t* zdim) {
} \
static inline CArray2_##tag \
carray2_##tag##_make(size_t ydim, size_t xdim, Value val) { \
- size_t n = ydim * xdim; \
+ const size_t n = ydim * xdim; \
Value* m = c_new_N(Value, n); \
for (size_t i=0; i<n; ++i) m[i] = val; \
CArray2_##tag a = {m, xdim | _carray_own, ydim * xdim}; \
@@ -122,7 +123,7 @@ static inline size_t _carray3_size(const size_t* zdim) {
} \
static inline CArray3_##tag \
carray3_##tag##_make(size_t zdim, size_t ydim, size_t xdim, Value val) { \
- size_t n = zdim * ydim * xdim; \
+ const size_t n = zdim * ydim * xdim; \
Value* m = c_new_N(Value, n); \
for (size_t i=0; i<n; ++i) m[i] = val; \
CArray3_##tag a = {m, xdim | _carray_own, ydim * xdim, zdim}; \