diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/stc/cspan.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/include/stc/cspan.h b/include/stc/cspan.h index 45e51b79..d91a3460 100644 --- a/include/stc/cspan.h +++ b/include/stc/cspan.h @@ -77,7 +77,7 @@ int demo2() { { if (++it->ref == it->end) it->ref = NULL; } \ struct stc_nostruct -#define using_cspan2(Self, T) using_cspan(Self##1, T, 1); using_cspan(Self##2, T, 2) +#define using_cspan2(Self, T) using_cspan(Self, T, 1); using_cspan(Self##2, T, 2) #define using_cspan3(Self, T) using_cspan2(Self, T); using_cspan(Self##3, T, 3) #define using_cspan4(Self, T) using_cspan3(Self, T); using_cspan(Self##4, T, 4) @@ -109,11 +109,11 @@ int demo2() { (void)memcpy((self)->dim, (uint32_t[]){__VA_ARGS__}, \ sizeof((self)->dim) + cspan_rank_ok(*(self), c_NUMARGS(__VA_ARGS__))) -#define cspan_at(spn, ...) ((spn).data + cspan_index((spn), __VA_ARGS__)) +#define cspan_at(spn, ...) ((spn).data + cspan_index(spn, __VA_ARGS__)) +#define cspan_front(spn) ((spn).data) +#define cspan_back(spn) ((spn).data + cspan_size(spn) - 1) #define cspan_subspan(spn, offset, count) \ - cspan_subspan1(spn, offset, count) -#define cspan_subspan1(spn, offset, count) \ {.data=cspan_at(spn, offset), .dim={count}} #define cspan_subspan2(spn, offset, count) \ {.data=cspan_at(spn, offset, 0), .dim={count, (spn).dim[1]}} @@ -122,6 +122,13 @@ int demo2() { #define cspan_subspan4(spn, offset, count) \ {.data=cspan_at(spn, offset, 0, 0, 0), .dim={count, (spn).dim[1], (spn).dim[2], (spn).dim[3]}} +#define cspan_subspan2(spn, offset, count) \ + {.data=cspan_at(spn, offset, 0), .dim={count, (spn).dim[1]}} +#define cspan_subspan3(spn, offset, count) \ + {.data=cspan_at(spn, offset, 0, 0), .dim={count, (spn).dim[1], (spn).dim[2]}} +#define cspan_subspan4(spn, offset, count) \ + {.data=cspan_at(spn, offset, 0, 0, 0), .dim={count, (spn).dim[1], (spn).dim[2], (spn).dim[3]}} + #define cspan_at4(...) c_MACRO_OVERLOAD(cspan_at4, __VA_ARGS__) #define cspan_at3(...) c_MACRO_OVERLOAD(cspan_at3, __VA_ARGS__) #define cspan_at2(spn, x) \ |
