#include "slice.h" #include #include Slice slice_write(Slice slice) { for (int i = slice.begin; i < slice.end; i++) putchar(slice.str[i]); return slice; } Slice slice_print(Slice slice) { putchar('"'); slice_write(slice); putchar('"'); putchar('\n'); return slice; } Slice slice_from_str(char *str) { if (str == NULL) return (Slice){ NULL, 0, 0 }; return (Slice){ str, 0, strlen(str) }; } Slice slice_sub(Slice src, int begin, int end) { return (Slice){ src.str, begin, end }; } int slice_equal(Slice s0, Slice s1) { if (slice_len(s0) != slice_len(s1)) return 0; return 0 == strncmp(s0.str + s0.begin, s1.str + s1.begin, slice_len(s0)); } int slice_len(Slice slice) { return slice.end - slice.begin; } void * slice_cpy(void *dest, Slice slice) { memcpy(dest, slice.str + slice.begin, slice_len(slice)); ((char*)dest)[slice_len(slice)] = '\0'; return dest; }