aboutsummaryrefslogtreecommitdiff
path: root/include/str.h
blob: c728bf0dc8ee07b368c047439adf5f04634830ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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, const byte* b, vlong len);
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(byte** fields, vlong numFields, const byte* sep);