#ifndef _SLICE_H_ #define _SLICE_H_ #include #include #define DEFINE_SLICE(t) \ typedef struct { \ size_t size; \ t *buf; \ } t##_slice; \ \ static inline t##_slice \ t##_slice2(t##_slice slice, size_t i, size_t j) \ { \ assert(i <= slice.size && j <= slice.size && i <= j); \ return (t##_slice) { \ .size = j - i, \ .buf = slice.buf + i, \ }; \ } \ \ static inline t##_slice \ t##_slice1(t##_slice slice, size_t i) \ { \ assert(i <= slice.size); \ return (t##_slice) { \ .size = slice.size - i, \ .buf = slice.buf + i, \ }; \ } #endif