summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-03-22 22:53:32 +0100
committerTyge Løvset <[email protected]>2021-03-22 22:53:32 +0100
commitc92f6f604dbb08530a8931bd6ce2db56d177130d (patch)
treea610d43e642236009c0c17e87575ebe7a18959fd
parente31376cace6a2bae2d13770ad818a38b3d3d6040 (diff)
downloadSTC-modified-c92f6f604dbb08530a8931bd6ce2db56d177130d.tar.gz
STC-modified-c92f6f604dbb08530a8931bd6ce2db56d177130d.zip
Final optimizations / minimal implementation carray.h
-rw-r--r--stc/carray.h18
1 files changed, 6 insertions, 12 deletions
diff --git a/stc/carray.h b/stc/carray.h
index 95ca9a63..54c0c71c 100644
--- a/stc/carray.h
+++ b/stc/carray.h
@@ -129,9 +129,8 @@ int main() {
STC_DEF carray2##X carray2##X##_from(carray2##X##_value_t* block, size_t xdim, size_t ydim) { \
size_t n = xdim * ydim; \
carray2##X _arr = {c_new_2(carray2##X##_value_t*, xdim), xdim, ydim}; \
- _arr.at[0] = block; \
- for (size_t x = 1; x < xdim; ++x) \
- _arr.at[x] = _arr.at[x - 1] + ydim; \
+ for (size_t x = 0; x < xdim; ++x, block += ydim) \
+ _arr.at[x] = block; \
return _arr; \
} \
\
@@ -163,15 +162,10 @@ int main() {
\
STC_DEF carray3##X carray3##X##_from(carray3##X##_value_t* block, size_t xdim, size_t ydim, size_t zdim) { \
carray3##X _arr = {c_new_2(carray3##X##_value_t**, xdim*(ydim + 1)), xdim, ydim, zdim}; \
- _arr.at[0] = (carray3##X##_value_t**) &_arr.at[xdim]; \
- _arr.at[0][0] = block; \
- for (size_t x = 1, m = zdim*ydim; x < xdim; ++x) { \
- _arr.at[x] = _arr.at[x - 1] + ydim; \
- _arr.at[x][0] = _arr.at[x - 1][0] + m; \
- } \
- for (size_t x = 0; x < xdim; ++x) \
- for (size_t y = 1; y < ydim; ++y) \
- _arr.at[x][y] = _arr.at[x][y - 1] + zdim; \
+ carray3##X##_value_t** p = (carray3##X##_value_t**) &_arr.at[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; \
return _arr; \
} \
\