summaryrefslogtreecommitdiffhomepage
path: root/src/rodeo_string.c
blob: 72baae78c30438ea8348575a0c8b83aa223a7a18 (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
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

// internal
#include "rodeo.h"
#include "rodeo_types.h"

// external
#define i_implement
#include <stc/cstr.h>

typedef union cstr rodeo_string_t;

rodeo_string_p
rodeo_string_create(const char *c_string)
{
	cstr* result = calloc(1, sizeof(cstr));
	if(c_string != NULL)
	{
		*result = cstr_from(c_string);
	}
	return (rodeo_string_p)result;
}

void
rodeo_string_destroy(rodeo_string_p self)
{
	cstr_drop((cstr*)self);
	//free(string); // the above already calls free on the entire pointer
}

char*
rodeo_string_to_cstr(rodeo_string_p self)
{
	return cstr_data((cstr*)self);
}

const char*
rodeo_string_to_constcstr(rodeo_string_p self)
{
	return cstr_str((cstr*)self);
}

void
rodeo_string_insert(
	rodeo_string_p self,
	const rodeo_string_p insert,
	intptr_t position
)
{
	cstr_insert_s((cstr*)self, position, *(cstr*)insert);
}

void
rodeo_string_append(
	rodeo_string_p self,
	const rodeo_string_p append
)
{
	rodeo_string_insert(
		self,
		append,
		cstr_size((cstr*)self) - 1
	);
}

void
rodeo_string_prepend(
	rodeo_string_p self,
	const rodeo_string_p prepend
)
{
	rodeo_string_insert(
		self,
		prepend,
		0
	);
}

void
rodeo_string_clear(rodeo_string_p self)
{
	cstr_clear((cstr*)self);
}

void
rodeo_string_set(rodeo_string_p self, char* value)
{
	cstr_clear((cstr*)self);
	cstr *temp = (cstr*)self;
	*temp = cstr_from(value);
}