refactored dyn_string functions, more function to macros

AuthorKonata <konata@posteo.jp>
Date
Commite273cb93b958dad5566712716af74f799ef3a78e
Parent957d0aa
4 files changed, 26 insertions(+), 19 deletions(-)
Minclude/cutils/dyn_string.h
@@ -14,21 +14,23 @@ typedef struct String
1414 size_t length;
1515 } String;
1616
17-String* new_string(void);
17+#define new_string() string_with_capacity(STRING_DEFAULT_SIZE);
1818 String* string_with_capacity(size_t capacity);
1919 void delete_string(String* string);
2020
2121 char string_at(const String* string, size_t index);
22+#define string_pop(string) string_pop_at(string, string->length-1);
23+char string_pop_at(String* string, size_t index);
2224
23-bool string_append(String* string, char character);
2425 bool string_insert(String* string, size_t index, char character);
26+#define string_push(string, character) string_insert(string, string->length, character);
2527
2628 void string_remove(String* string, size_t index);
2729
2830 bool string_adjust_size(String* string, size_t size);
2931 size_t* string_find_char(const String* haystack, const char needle);
30-bool string_concat(String* string, const String* other);
3132
33+bool string_concat(String* string, const String* other);
3234 String* from_cstring(const char* cstring);
3335 char* to_cstring(const String* string);
3436
Minclude/cutils/vector.h
@@ -24,6 +24,7 @@ void* vector_pop_at(Vector* vector, size_t index);
2424
2525 bool vector_insert(Vector* vector, size_t index, void* item);
2626 #define vector_push(vector, item) vector_insert(vector, vector->length, item);
27+
2728 void vector_remove(Vector* vector, size_t index, void (*rmv)(void*));
2829
2930 bool vector_adjust_size(Vector* vector, size_t size);
Msrc/dyn_string.c
@@ -1,10 +1,5 @@
11 #include <cutils/dyn_string.h>
22
3-String* new_string(void)
4-{
5- return string_with_capacity(STRING_DEFAULT_SIZE);
6-}
7-
83 String* string_with_capacity(size_t capacity)
94 {
105 String* string = malloc(sizeof(*string));
@@ -22,11 +17,6 @@ String* string_with_capacity(size_t capacity)
2217 return string;
2318 }
2419
25-bool string_append(String* string, char character)
26-{
27- return string_insert(string, string->length, character);
28-}
29-
3020 void string_remove(String* string, size_t index)
3121 {
3222 if(index < string->length)
@@ -55,6 +45,18 @@ char string_at(const String* string, size_t index)
5545 return string->chars[index];
5646 }
5747
48+char string_pop_at(String* string, size_t index)
49+{
50+ char tmp = string_at(string, index);
51+ if(!tmp)
52+ {
53+ return '\0';
54+ } else {
55+ string_remove(string, index);
56+ return tmp;
57+ }
58+}
59+
5860 bool string_concat(String* string, const String* other)
5961 {
6062 if(!string_adjust_size(string,string->length+other->length-1))
@@ -97,7 +99,6 @@ bool string_adjust_size(String* string, size_t size)
9799 }
98100
99101
100-
101102 void delete_string(String* string)
102103 {
103104 free(string->chars);
Msrc/test.c
@@ -65,13 +65,16 @@ static void test1(void)
6565
6666 static void test2(void)
6767 {
68- String* test = new_string();
68+ String* test;
6969 String* test2;
7070 char* cstring;
71- string_append(test, 'a');
72- string_append(test, 'b');
73- string_append(test, 'c');
74- string_append(test, 'd');
71+
72+ test = new_string();
73+
74+ string_push(test, 'a');
75+ string_push(test, 'b');
76+ string_push(test, 'c');
77+ string_push(test, 'd');
7578 printf("%ld\n", test->length);
7679
7780 cstring = to_cstring(test);