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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
#ifndef STRBUF_H
#define STRBUF_H
#include <stdlib.h>
#include <libguile.h>
#include "macro.h"
/*
* A high level string type which holds it's own length, how much
* memmory it has allocated for itself, and a seek pointer into the
* string.
*
* Also comes with a number of functions which allow for safe(er)
* access to the memmory.
*/
typedef struct {
char* mem;
SCM scm;
/* TODO add support for negative ptr */
int ptr;
unsigned int alloc;
unsigned int len;
} strbuf;
/*
* Init strbuf to size of 10
*/
INIT_F(strbuf);
/*
* Like realloc, but for strbuf
*/
int strbuf_realloc(strbuf* str, size_t len);
/*
* Free's contents of str, but keeps str.
*/
FREE_F(strbuf);
int strbuf_cmp(strbuf* a, strbuf* b);
int strbuf_c(strbuf* a, const char* b);
/*
* Copy contents from src to dest.
* Assumes that dest is already initialized.
*/
int DEEP_COPY(strbuf)(strbuf*, strbuf*);
/*
* Append char to end of strbuf, determined by s->len.
*
* TODO rename this PUSH(strbuf)?
*/
int strbuf_append(strbuf* s, char c);
char strbuf_pop(strbuf*);
/*
* Calls strbuf_append with NULL.
*/
int strbuf_cap(strbuf* s);
/*
* Returns a pointer to character at index. Allows mutation of the
* value pointed to by the return address.
*/
char* charat(strbuf* s, unsigned int idx);
/*
* Same as `charat`, But returns the current character.
*/
char* strbuf_cur(strbuf* s);
/*
* Resets the seek for strbuf to 0.
*/
int strbuf_reset(strbuf* s);
/*
* Sets the length and seek ptr to 0, but doesn't touch the memmory.
*/
int strbuf_soft_reset(strbuf* s);
/*
* Returns the character after the last, so where null hopefully is.
*/
char* strbuf_end(strbuf* s);
/*
* Reallocs dest to be the same size as src, and copies the contents
* of src into dest.
*/
int strbuf_realloc_copy(strbuf* dest, strbuf* src);
/*
* Copies contents from src to dest, also allocating dest in the
* process. dest should not be initialized before self call.
*/
int strbuf_init_copy(strbuf* dest, strbuf* src);
strbuf* RESOLVE(strbuf)(strbuf*, strbuf*);
FMT_F(strbuf);
int SIZE(strbuf)(strbuf*);
int strbuf_load(strbuf* self, const char* str);
#endif /* STRBUF_H */
|