blob: 15a8805755ba8499628437038f21778f88ea3d82 [file] [log] [blame]
Damien429d7192013-10-04 19:53:11 +01001// a mini library of useful types and functions
2
3#ifndef _INCLUDED_MINILIB_H
4#define _INCLUDED_MINILIB_H
5
6/** types *******************************************************/
7
8typedef int bool;
9enum {
10 false = 0,
11 true = 1
12};
13
14typedef unsigned char byte;
15typedef unsigned int uint;
16
17/** memomry allocation ******************************************/
18
19#define m_new(type, num) ((type*)(m_malloc(sizeof(type) * (num))))
20#define m_new0(type, num) ((type*)(m_malloc0(sizeof(type) * (num))))
21#define m_renew(type, ptr, num) ((type*)(m_realloc((ptr), sizeof(type) * (num))))
22
23void m_free(void *ptr);
24void *m_malloc(int num_bytes);
25void *m_malloc0(int num_bytes);
26void *m_realloc(void *ptr, int num_bytes);
27
Damien8b3a7c22013-10-23 20:20:17 +010028int m_get_total_bytes_allocated(void);
Damien429d7192013-10-04 19:53:11 +010029
30/** unichar / UTF-8 *********************************************/
31
32typedef int unichar; // TODO
33
34unichar g_utf8_get_char(const char *s);
35char *g_utf8_next_char(const char *s);
36
37bool g_unichar_isspace(unichar c);
38bool g_unichar_isalpha(unichar c);
39bool g_unichar_isprint(unichar c);
40bool g_unichar_isdigit(unichar c);
41
42//char *g_strdup(const char *s);
43
44/** blob ********************************************************/
45
46/*
47unsigned short decode_le16(byte *buf);
48unsigned int decode_le32(byte *buf);
49void encode_le16(byte *buf, unsigned short i);
50void encode_le32(byte *buf, unsigned int i);
51*/
52
53/** string ******************************************************/
54
55/*
56#define streq(s1, s2) (strcmp((s1), (s2)) == 0)
57*/
58
59/** variable string *********************************************/
60
Damien68f59a92013-10-20 14:39:58 +010061typedef struct _vstr_t {
62 int alloc;
63 int len;
64 char *buf;
65 bool had_error;
66} vstr_t;
Damien429d7192013-10-04 19:53:11 +010067
Damien68f59a92013-10-20 14:39:58 +010068void vstr_init(vstr_t *vstr);
69void vstr_clear(vstr_t *vstr);
Damien8b3a7c22013-10-23 20:20:17 +010070vstr_t *vstr_new(void);
Damien429d7192013-10-04 19:53:11 +010071void vstr_free(vstr_t *vstr);
72void vstr_reset(vstr_t *vstr);
73bool vstr_had_error(vstr_t *vstr);
74char *vstr_str(vstr_t *vstr);
75int vstr_len(vstr_t *vstr);
76void vstr_hint_size(vstr_t *vstr, int size);
77char *vstr_add_len(vstr_t *vstr, int len);
Damien68f59a92013-10-20 14:39:58 +010078void vstr_add_byte(vstr_t *vstr, byte v);
79void vstr_add_char(vstr_t *vstr, unichar chr);
Damien429d7192013-10-04 19:53:11 +010080void vstr_add_str(vstr_t *vstr, const char *str);
81void vstr_add_strn(vstr_t *vstr, const char *str, int len);
Damien68f59a92013-10-20 14:39:58 +010082//void vstr_add_le16(vstr_t *vstr, unsigned short v);
83//void vstr_add_le32(vstr_t *vstr, unsigned int v);
Damien429d7192013-10-04 19:53:11 +010084void vstr_cut_tail(vstr_t *vstr, int len);
Damien2f06c572013-11-03 18:20:56 +000085void vstr_printf(vstr_t *vstr, const char *fmt, ...);
86void vstr_vprintf(vstr_t *vstr, const char *fmt, va_list ap);
Damien429d7192013-10-04 19:53:11 +010087
88/** unique string ***********************************************/
89
90typedef unsigned int qstr;
91
Damien8b3a7c22013-10-23 20:20:17 +010092void qstr_init(void);
Damien429d7192013-10-04 19:53:11 +010093qstr qstr_from_str_static(const char *str);
94qstr qstr_from_str_take(char *str);
95qstr qstr_from_strn_copy(const char *str, int len);
96const char* qstr_str(qstr qstr);
97
98#endif // _INCLUDED_MINILIB_H