aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--README.md31
-rw-r--r--chad/experimental/require.h2
-rw-r--r--chad/experimental/strlist.h65
4 files changed, 29 insertions, 75 deletions
diff --git a/Makefile b/Makefile
index c4904f6..e6d9d5d 100644
--- a/Makefile
+++ b/Makefile
@@ -4,11 +4,11 @@ so:
${CC} -fPIC -shared ${SOURCE} -o object/libchad.so
dist:
- -mkdir object/chad/
+ -mkdir object/chad/ 2> /dev/null
for d in chad/ extern/; do \
- pushd $$d; \
+ pushd $$d &> /dev/null; \
find ./ -type f -name '*.h' -exec cp --parents {} ../object/chad/ \; ; \
- popd; \
+ popd &> /dev/null; \
done
clean:
diff --git a/README.md b/README.md
index 72f356c..4ee2e0f 100644
--- a/README.md
+++ b/README.md
@@ -16,12 +16,24 @@ C libraries are hard to find; good libraries are even harder.
| :--- | :---------- |
| dictate.h | Über-printer. |
| plumblism.h | PBMplus (PNM) image IO. |
+// https://github.com/ClecioJung/ini (slight renaming and _Generic)
+// https://github.com/an-dr/microlog
### Datastructures
-| Lib | Description |
-| :--- | :---------- |
-| sds.h | Dynamic strings. |
+| Lib | Description |
+| :--- | :---------- |
+| sds.h | Dynamic strings. |
+| haste.h | Type-safe generic containers optimized single threaded speed. |
+| strlist.h | String lists. |
+
+### Memory
+
+| Lib | Description |
+| :--- | :---------- |
+| memory-units.h | Memory unit macros. |
+| zone.h | Zone allocator. |
+// arena allocator
### Ported functionality
@@ -40,7 +52,6 @@ Experimental libraries on the other hand are volatile.
| Lib | Description |
| :--- | :---------- |
| bits.h | Various miscellaneous functionalities. |
-| kvec.h | Small, typesafe, generic datastructures optimized for speed. |
## Criteria
@@ -86,8 +97,6 @@ Complexity has its place: within its own library.
}
# something addressing math.h
# gcd(), lcm(), sq() /*square, after ino*/
- # trim() and pad() even tho its a meme
- # MB(n) etc. macros
#
# the linux kernel has a bunch of small, high quality utilities,
# these should be inspected
@@ -101,4 +110,14 @@ Complexity has its place: within its own library.
#
# Same applies to plan9
# * libutf
+ #
+ # and qlib
+ # * qencode
+ # * qcount
+ #
+ # Strings:
+ # trim() and pad() even tho its a meme
+ # slugify
+ # reverse
+ # case conversions
```
diff --git a/chad/experimental/require.h b/chad/experimental/require.h
index e9a8ea8..afb20e9 100644
--- a/chad/experimental/require.h
+++ b/chad/experimental/require.h
@@ -39,7 +39,7 @@
thread_local long long require_v;
#ifndef REQUIRE_TERMINATOR
-# define REQUIRE_TERMINATOR default_require_terminator
+# define REQUIRE_TERMINATOR(...) default_require_terminator(__VA_ARGS__)
#endif
[[ noreturn ]]
diff --git a/chad/experimental/strlist.h b/chad/experimental/strlist.h
deleted file mode 100644
index 33d42f7..0000000
--- a/chad/experimental/strlist.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef STRLIST_H
-#define STRLIST_H
-
-/* The string based list is a common pattern,
- * as it is the most intuitive way to serialize a list.
- *
- * In many languages you would handle it by instantiating
- * an actual list by means of splitting,
- * but in C we can often do better
- * (and we dont have general lists to begin with).
- *
- * Examples would include:
- * + file paths (a/b)
- * + file extensions (a.b)
- * + unix style option lists (a:b)
- * + symbol hierarchies (a->b)
- */
-
-typedef const char * const * const sep_t;
-sep_t UNIX_PATH_SEP = { "/", NULL, };
-sep_t DOS_PATH_SEP = { "\\", NULL, };
-sep_t UNIX_SEP = { ":", NULL, };
-sep_t CPP_SEP = { "::", ".", "->", NULL, };
-sep_t EXT_SEP = { ".", NULL, };
-
-size_t strlist_len(char * list, sep_t sep);
-
-/* This function in an abstract sense performs list indexing.
- * The result overwrites the `list` argument and is returned.
- * (We know that this may never result in an overflow.)
- */
-char * strlist_component(char * list, size_t n, sep_t sep);
-/* This function returns a range.
- */
-char * strlist_components(char * list, size_t from, size_t to, sep_t sep);
-
-/* The following are shorthands for component()/components(),
- * with a specific numbers which may or may not be length specific
- *
- * Visual explanation:
- * this/is/my/example/path
- * Root <---------------->
- * Base <-->
- * Head <-->
- * Tail <---------------->
- */
-char * strlist_root(char * list, sep_t sep);
-char * strlist_base(char * list, sep_t sep);
-char * strlist_head(char * list, sep_t sep);
-char * strlist_tail(char * list, sep_t sep);
-
-/* Notes:
- * + we very consciously made the decision to not take a destination operand;
- * you would have to allocate it just the same,
- * copying the source string is not a real performance concern,
- * but we want our interface to be as clean as possible
- */
-
-/* Example:
- * Getting the absolute basename of a file.
- * char name[] = "this/is/my.file.example";
- * name = strlist_head(strlist_base(name, UNIX_PATH_SEP), EXT_SEP);
- */
-
-#endif