From 5989629a7951e544ad4656672025a99ecd08c7c9 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Sat, 11 Feb 2023 21:31:04 -0800 Subject: Change how slices work. I'm switching to a more macro-heavy solution. Hopefully it proves robust. --- bytecode/slice.h | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) (limited to 'bytecode/slice.h') diff --git a/bytecode/slice.h b/bytecode/slice.h index 577befd..4f4624c 100644 --- a/bytecode/slice.h +++ b/bytecode/slice.h @@ -1,27 +1,33 @@ #ifndef _SLICE_H_ #define _SLICE_H_ +#include #include -#include -#include "value.h" - -struct slice { - size_t size; - uint8_t *buf; -}; - -struct val_slice { - size_t size; - value *buf; -}; - -struct slice slice(struct slice, size_t, size_t); - -struct slice slice1(struct slice, size_t); - -struct val_slice val_slice(struct val_slice, size_t, size_t); - -struct val_slice val_slice1(struct val_slice, size_t); +#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 -- cgit v1.3.1