dyn_string.h
Raw
1#ifndef CUTILS_DYN_STRING_H
2#define CUTILS_DYN_STRING_H
3
4#define STRING_DEFAULT_SIZE 8
5
6#include <stdlib.h>
7#include <string.h>
8#include <cutils/common.h>
9
10typedef struct String
11{
12 char* chars;
13 size_t capacity;
14 size_t length;
15} String;
16
17#define new_string() string_with_capacity(STRING_DEFAULT_SIZE)
18String* string_with_capacity(size_t capacity);
19void delete_string(String* string);
20
21char string_at(const String* string, size_t index);
22#define string_pop(string) string_pop_at(string, string->length-1)
23char string_pop_at(String* string, size_t index);
24
25bool string_insert(String* string, size_t index, char character);
26#define string_push(string, character) string_insert(string, string->length, character)
27
28void string_remove(String* string, size_t index);
29void string_remove_range(String* string, size_t index, size_t length);
30
31bool string_adjust_size(String* string, size_t size);
32/* TODO: rework find functions to take extra argument of result count
33 * and then find that many and return them in a vector/linked list */
34bool string_find_char(const String* haystack, const char needle, size_t* pos);
35bool string_find_str(const String* haystack, const String* needle, size_t* pos);
36
37bool string_concat(String* string, const String* other);
38
39String* from_cstring(const char* cstring);
40String* from_cstring_del(char* cstring);
41char* to_cstring(const String* string);
42char* to_cstring_del(String* string);
43
44
45#endif /* CUTILS_DYN_STRING_H */
46