From 48b5199a2ff5a31349bcff2d3ff70cb1d31a3f9f Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Wed, 14 Oct 2020 20:54:51 +0200 Subject: Simplified repr. --- stc/carray.h | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/stc/carray.h b/stc/carray.h index 5858b004..05ddda37 100644 --- a/stc/carray.h +++ b/stc/carray.h @@ -45,27 +45,25 @@ int main() } */ -#define carray1_xdim(a) ((a)._xdim & _carray_SUB) +#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 carray2_xdim(a) carray1_xdim(a) +#define carray2_ydim(a) (a)._ydim +#define carray2_size(a) _carray2_size(&(a)._ydim) -#define carray3_xdim(a) carray1_xdim(a) -#define carray3_ydim(a) carray2_ydim(a) -#define carray3_zdim(a) ((a)._zdim) +#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) -STC_INLINE size_t _carray2_ydim(const size_t* yxdim) { - return yxdim[0] / (yxdim[-1] & _carray_SUB); -} -STC_INLINE size_t _carray3_size(const size_t* zdim) { - return zdim[0] * zdim[-1]; -} +STC_INLINE size_t +_carray2_size(const size_t* ydim) {return ydim[0] * ydim[-1];} +STC_INLINE size_t +_carray3_size(const size_t* zdim) {return zdim[0] * zdim[-1] * zdim[-2];} #define using_carray_common(D, X, Value, valueDestroy) \ @@ -108,12 +106,12 @@ STC_INLINE size_t _carray3_size(const size_t* zdim) { \ typedef struct { \ Value *data; \ - size_t _xdim, _yxdim; \ + size_t _xdim, _ydim; \ } carray2##X, carray2##X##_t; \ \ typedef struct { \ Value *data; \ - size_t _xdim, _yxdim, _zdim; \ + size_t _xdim, _ydim, _zdim; \ } carray3##X, carray3##X##_t; \ \ using_carray_common(1, X, Value, valueDestroy) \ @@ -132,7 +130,7 @@ STC_INLINE size_t _carray3_size(const size_t* zdim) { const size_t n = ydim * xdim; \ Value* m = c_new_2(Value, n); \ for (size_t i=0; idata + z*a->_yxdim, carray3_xdim(*a), a->_yxdim}; \ + carray2##X sub = {a->data + z*a->_ydim*carray2_xdim(*a), carray3_xdim(*a), a->_ydim}; \ return sub; \ } \ STC_INLINE carray1##X \ carray3##X##_at2(carray3##X *a, size_t z, size_t y) { \ - carray1##X sub = {a->data + z*a->_yxdim + y*carray3_xdim(*a), carray3_xdim(*a)}; \ + carray1##X sub = {a->data + (z*a->_ydim + y)*carray3_xdim(*a), carray3_xdim(*a)}; \ return sub; \ } \ STC_INLINE Value* \ carray3##X##_at(carray3##X *a, size_t z, size_t y, size_t x) { \ - return a->data + z*a->_yxdim + y*carray3_xdim(*a) + x; \ + return a->data + (z*a->_ydim + y)*carray3_xdim(*a) + x; \ } \ typedef carray1##X carray1##X##_t -- cgit v1.2.3