summaryrefslogtreecommitdiffhomepage
path: root/include/stc/cspan.h
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2023-01-16 08:08:17 +0100
committerTyge Løvset <[email protected]>2023-01-16 08:08:17 +0100
commitf9bb1e77a79aa9d02f5d816491e7fd53db0b964a (patch)
tree41306f366ddcc981772b69995048f850c71fbd73 /include/stc/cspan.h
parent6e87be35f46f1090d8165d07447c9b3c002820af (diff)
downloadSTC-modified-f9bb1e77a79aa9d02f5d816491e7fd53db0b964a.tar.gz
STC-modified-f9bb1e77a79aa9d02f5d816491e7fd53db0b964a.zip
Final cspan code update.
Diffstat (limited to 'include/stc/cspan.h')
-rw-r--r--include/stc/cspan.h38
1 files changed, 20 insertions, 18 deletions
diff --git a/include/stc/cspan.h b/include/stc/cspan.h
index 9b6893be..71db232e 100644
--- a/include/stc/cspan.h
+++ b/include/stc/cspan.h
@@ -83,19 +83,21 @@ int demo2() {
#define cspan_rank_ok(self, rank) c_STATIC_ASSERT(cspan_rank(self) == rank)
-#define cspan_literal(S, ...) \
- (c_INIT(S){.data = (S##_value[])__VA_ARGS__, \
- .dim = {sizeof((S##_value[])__VA_ARGS__)/sizeof(S##_value)}})
-
-#define cspan_make(data, ...) \
- {data, {__VA_ARGS__}}
+#define cspan_make(array, ...) \
+ {.data=array, .dim={__VA_ARGS__}}
/* create a cspan from a cvec, cstack, cdeq, cqueue, or cpque (heap) */
#define cspan_from(container) \
- {(container)->data, {(container)->_len}}
+ {.data=(container)->data, .dim={(container)->_len}}
#define cspan_from_array(array) \
- {(array) + c_STATIC_ASSERT(sizeof(array) != sizeof(void*)), {c_ARRAYLEN(array)}}
+ {.data=(array) + c_STATIC_ASSERT(sizeof(array) != sizeof(void*)), .dim={c_ARRAYLEN(array)}}
+
+#define cspan_from_list(ValueType, ...) \
+ {.data=(ValueType[])__VA_ARGS__, .dim={sizeof((ValueType[])__VA_ARGS__)/sizeof(ValueType)}}
+
+#define cspan_literal(SpanType, ...) \
+ (c_INIT(SpanType)cspan_from_list(SpanType##_value, __VA_ARGS__))
#define cspan_size(self) _cspan_size((self)->dim, cspan_rank(self))
#define cspan_rank(self) c_ARRAYLEN((self)->dim)
@@ -110,26 +112,26 @@ int demo2() {
#define cspan_at(self, ...) ((self)->data + cspan_index(self, __VA_ARGS__))
#define cspan_slice1(self, x0, width) \
- {cspan_at(self, x0), {width}}
+ {.data=cspan_at(self, x0), .dim={width}}
#define cspan_slice2(self, x0, width) \
- {cspan_at(self, x0, 0), {width, (self)->dim[1]}}
+ {.data=cspan_at(self, x0, 0), .dim={width, (self)->dim[1]}}
#define cspan_slice3(self, x0, width) \
- {cspan_at(self, x0, 0, 0), {width, (self)->dim[1], (self)->dim[2]}}
+ {.data=cspan_at(self, x0, 0, 0), .dim={width, (self)->dim[1], (self)->dim[2]}}
#define cspan_slice4(self, x0, width) \
- {cspan_at(self, x0, 0, 0, 0), {width, (self)->dim[1], (self)->dim[2], (self)->dim[3]}}
+ {.data=cspan_at(self, x0, 0, 0, 0), .dim={width, (self)->dim[1], (self)->dim[2], (self)->dim[3]}}
#define cspan_2to1(self, x) \
- {cspan_at(self, x, 0), {(self)->dim[1]}}
+ {.data=cspan_at(self, x, 0), .dim={(self)->dim[1]}}
#define cspan_3to1(self, x, y) \
- {cspan_at(self, x, y, 0), {(self)->dim[2]}}
+ {.data=cspan_at(self, x, y, 0), .dim={(self)->dim[2]}}
#define cspan_3to2(self, x) \
- {cspan_at(self, x, 0, 0), {(self)->dim[1], (self)->dim[2]}}
+ {.data=cspan_at(self, x, 0, 0), .dim={(self)->dim[1], (self)->dim[2]}}
#define cspan_4to1(self, x, y, z) \
- {cspan_at(self, x, y, z, 0), {(self)->dim[3]}}
+ {.data=cspan_at(self, x, y, z, 0), .dim={(self)->dim[3]}}
#define cspan_4to2(self, x, y) \
- {cspan_at(self, x, y, 0, 0), {(self)->dim[2], (self)->dim[3]}}
+ {.data=cspan_at(self, x, y, 0, 0), .dim={(self)->dim[2], (self)->dim[3]}}
#define cspan_4to3(self, x) \
- {cspan_at(self, x, 0, 0, 0), {(self)->dim[1], (self)->dim[2], (self)->dim[3]}}
+ {.data=cspan_at(self, x, 0, 0, 0), .dim={(self)->dim[1], (self)->dim[2], (self)->dim[3]}}
STC_INLINE size_t _cspan_i1(const uint32_t dim[1], uint32_t x)
{ c_ASSERT(x < dim[0]); return x; }