diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9022b0f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +a.out +examples/* +!examples/*.c diff --git a/buildExamples.sh b/buildExamples.sh new file mode 100755 index 0000000..a96af80 --- /dev/null +++ b/buildExamples.sh @@ -0,0 +1,4 @@ +#!/bin/sh +for f in examples/*.c; do + cc -O2 -Wall -Wextra -std=c99 "$f" -o "${f%.c}" +done diff --git a/examples/da_float.c b/examples/da_float.c index 08455a3..b66afc5 100644 --- a/examples/da_float.c +++ b/examples/da_float.c @@ -1,16 +1,17 @@ #include +#include #define LAZY_IMPL -#include "lazy.h" +#include "../lazy.h" int main() { Lz_DA(float) nums = {0}; lz_da_reserve(nums, 64); - for (int i = 0; i < 32; ++i) { + for (size_t i = 0; i < 32; ++i) { lz_da_append(nums, 2.0*i); } - for (int i = 0; i < nums.cnt; ++i) { - printf("%f\n", nums.elts[i]); + for (size_t i = 0; i < nums.cnt; ++i) { + printf("%f\n", nums.data[i]); } return 0; diff --git a/examples/da_ins.c b/examples/da_ins.c index 01d7664..595781a 100644 --- a/examples/da_ins.c +++ b/examples/da_ins.c @@ -1,4 +1,5 @@ #include +#include #define LAZY_IMPL #include "../lazy.h" @@ -9,14 +10,14 @@ int main() { lz_da_append(xs, 4); lz_da_shrink_to_fit(xs); - for (int i = 0; i < xs.cnt; ++i) { - printf("%d: %d\n", i, xs.elts[i]); + for (size_t i = 0; i < xs.cnt; ++i) { + printf("%zu: %d\n", i, xs.data[i]); } printf("\n"); lz_da_insert(xs,1,2); - for (int i = 0; i < xs.cnt; ++i) { - printf("%d: %d\n", i, xs.elts[i]); + for (size_t i = 0; i < xs.cnt; ++i) { + printf("%zu: %d\n", i, xs.data[i]); } } diff --git a/examples/string_split.c b/examples/string_split.c index 0de3d94..6720f3b 100644 --- a/examples/string_split.c +++ b/examples/string_split.c @@ -1,5 +1,5 @@ #define LAZY_IMPL -#include "lazy.h" +#include "../lazy.h" #include #include #include @@ -7,16 +7,16 @@ int isnotalpha(int x) { return !isalpha(x); } int main() { - char *src = strdup("This is a list of words, which apparently has been referred to previously as a sentence") + char *src = lz_cstr_dup("This is a list of words, which apparently has been referred to previously as a sentence"); Lz_Slc s = lz_cstr_to_slc(src); Lz_Slc word; int i = 0; do { lz_split_slc_typ(&s, isnotalpha, &word); - printf("Word %d: "LZ_SLC_FMT"\n", i, LZ_SLC_PRINTF(word)); + printf("Word %d: "LZ_STR_FMT"\n", i, LZ_STR_PRINTF(word)); ++i; - } while(s.len != 0); + } while(s.cnt != 0); free(src); diff --git a/examples/string_trim.c b/examples/string_trim.c index 83b3502..689583d 100644 --- a/examples/string_trim.c +++ b/examples/string_trim.c @@ -1,15 +1,16 @@ #include #include +#include #define LAZY_IMPL -#include "lazy.h" +#include "../lazy.h" int main() { - char *src = strdup(" \t This text has some extra whitespace \t "); + char *src = lz_cstr_dup(" \t This text has some extra whitespace \t "); Lz_Slc s = lz_cstr_to_slc(src); - printf("|"LZ_SLC_FMT"|\n", LZ_SLC_PRINTF(s)); + printf("|"LZ_STR_FMT"|\n", LZ_STR_PRINTF(s)); lz_trim_typ(&s, isspace); - printf("|"LZ_SLC_FMT"|\n", LZ_SLC_PRINTF(s)); + printf("|"LZ_STR_FMT"|\n", LZ_STR_PRINTF(s)); free(src); // excessive but this is how you should do it diff --git a/lazy.h b/lazy.h index 055591b..2b73820 100644 --- a/lazy.h +++ b/lazy.h @@ -19,6 +19,7 @@ void lz_drop_right(Lz_Slc *src, size_t n); void lz_split_slc(Lz_Slc *src, char delim, Lz_Slc *dst); void lz_split_slc_typ(Lz_Slc *src, int (*classfunc)(int), Lz_Slc *dst); Lz_Slc lz_cstr_to_slc(char *dat); +char *lz_cstr_dup(const char *s); #define Lz_DA(T) struct {T *data; size_t cnt; size_t cap; } #define lz_da_append(da, x) do { \ @@ -85,6 +86,17 @@ Lz_Slc lz_cstr_to_slc(char *dat); typedef Lz_DA(char) Lz_SB; #ifdef LAZY_IMPL + +// Horribly enough, strdup is a gnu extension +// Here's a portable implementation +char *lz_cstr_dup(const char *s) { + if (!s) return NULL; + size_t n = strlen(s); + char *p = malloc((n+1)*sizeof(char)); + if (!p) return NULL; + memcpy(p, s, n+1); + return p; +} void lz_drop_left(Lz_Slc *src, size_t n) { if (src->cnt < n) n = src->cnt; src->data += n;