aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/str.h8
-rw-r--r--include/vec.h3
2 files changed, 7 insertions, 4 deletions
diff --git a/include/str.h b/include/str.h
index 781d910..153eebc 100644
--- a/include/str.h
+++ b/include/str.h
@@ -16,11 +16,15 @@ typedef struct {
byte *data;
size len;
} StrView;
-i32 Str_equals(Str a, Str b);
u64 Str_hash64(Str s);
Str Str_copy(Arena *a, byte *data, size len);
i32 Str_fprint(FILE *w, Str s);
StrView Str_view(byte *data, size len);
-i32 StrView_fprint(FILE *w, StrView s);
Str StrView_copy(Arena *a, StrView s);
+
+// Macros working with both types
+// Returns 1 if strings are equal, 0 otherwise
+#define Str_equals(a, b) \
+ ((a).len == (b).len) && (!(a).len || !memcmp((a).data, (b).data, (a).len))
+#define Str_fprint(w, s) fprintf(w, "%.*s", (i32)(s).len, (s).data)
diff --git a/include/vec.h b/include/vec.h
index bf6729b..8ff0332 100644
--- a/include/vec.h
+++ b/include/vec.h
@@ -15,5 +15,4 @@ typedef struct {
#define Vec_new(a, T, cap) _Vec_new(a, sizeof(T), cap, _Alignof(T))
Vec _Vec_new(Arena *a, size tsize, size cap, size align);
void Vec_push(Arena *a, Vec *v, void *data);
-#define Vec_get(v, T, p) (T *)_Vec_get(v, p)
-void *_Vec_get(Vec v, size pos);
+#define Vec_get(v, T, pos) (T *)(v.data + v.tsize * pos)