From df2a9476a1767bdce83e081470b31ffb89749034 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Sun, 19 Apr 2020 09:29:12 -0700 Subject: chore: reorganized header structure and updated makefile --- include/.include/str.h | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 include/.include/str.h (limited to 'include/.include/str.h') diff --git a/include/.include/str.h b/include/.include/str.h new file mode 100644 index 0000000..85051e4 --- /dev/null +++ b/include/.include/str.h @@ -0,0 +1,62 @@ +#pragma once + +typedef byte* string; + +typedef struct str·Hdr +{ + vlong len; + vlong cap; + byte buf[]; +} str·Hdr; + +// ------------------------------------------------------------------------- +// UTF-8 functions. +// Perhaps break into own unit +// TODO: Add to(upper|lower|title) + +typedef uint32 Rune; + +enum +{ + UTFmax = 4, + RuneSync = 0x80, + RuneSelf = 0x80, + RuneErr = 0xFFFD, + RuneMax = 0x10FFFF, +}; + +int utf8·fullRune(byte *s, int n); +byte *utf8·findRune(byte *s, long i); +int utf8·charToRune(Rune *r, byte *s); +int utf8·runeToChar(byte *s, Rune *r); +int utf8·len(byte *s); +int utf8·runeLen(Rune r); +int utf8·isLetter(Rune r); +int utf8·isDigit(Rune r); +int utf8·isSpace(Rune r); +int utf8·isTitle(Rune r); + +// ------------------------------------------------------------------------- +// Dynamic string functions + +string str·newCap(const byte *s, vlong len, vlong cap); +string str·newLen(const byte *s, vlong len); +string str·new(const byte *s); +string str·newf(const byte *fmt, ...); +void str·free(string s); +int str·len(const string s); +int str·cap(const string s); +string str·clear(string s); +string str·grow(string s, vlong delta); +string str·fit(string s); +string str·appendCount(string s, vlong len, const byte *b); +string str·append(string s, const byte* b); +string str·appendf(string s, const byte* fmt, ...); +string str·appendByte(string s, const byte b); +bool str·equals(const string s, const string t); +int str·find(string s, const byte* substr); +void str·lower(string s); +void str·upper(string s); +void str·replace(string s, const byte* from, const byte* to); +string* str·split(string s, const byte* tok); +string str·join(vlong len, byte** fields, const byte* sep); -- cgit v1.2.1