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
size_t length;
} String;
String* new_string(void);
#define new_string() string_with_capacity(STRING_DEFAULT_SIZE);
String* string_with_capacity(size_t capacity);
void delete_string(String* string);
char string_at(const String* string, size_t index);
#define string_pop(string) string_pop_at(string, string->length-1);
char string_pop_at(String* string, size_t index);
bool string_append(String* string, char character);
bool string_insert(String* string, size_t index, char character);
#define string_push(string, character) string_insert(string, string->length, character);
void string_remove(String* string, size_t index);
bool string_adjust_size(String* string, size_t size);
size_t* string_find_char(const String* haystack, const char needle);
bool string_concat(String* string, const String* other);
bool string_concat(String* string, const String* other);
String* from_cstring(const char* cstring);
char* to_cstring(const String* string);
▾Minclude/cutils/vector.h
@@ -24,6 +24,7 @@ void* vector_pop_at(Vector* vector, size_t index);
bool vector_insert(Vector* vector, size_t index, void* item);
#define vector_push(vector, item) vector_insert(vector, vector->length, item);
void vector_remove(Vector* vector, size_t index, void (*rmv)(void*));
bool vector_adjust_size(Vector* vector, size_t size);
▾Msrc/dyn_string.c
@@ -1,10 +1,5 @@
#include <cutils/dyn_string.h>
String* new_string(void)
{
return string_with_capacity(STRING_DEFAULT_SIZE);
}
String* string_with_capacity(size_t capacity)
{
String* string = malloc(sizeof(*string));
@@ -22,11 +17,6 @@ String* string_with_capacity(size_t capacity)
return string;
}
bool string_append(String* string, char character)
{
return string_insert(string, string->length, character);
}
void string_remove(String* string, size_t index)
{
if(index < string->length)
@@ -55,6 +45,18 @@ char string_at(const String* string, size_t index)
return string->chars[index];
}
char string_pop_at(String* string, size_t index)
{
char tmp = string_at(string, index);
if(!tmp)
{
return '\0';
} else {
string_remove(string, index);
return tmp;
}
}
bool string_concat(String* string, const String* other)
{
if(!string_adjust_size(string,string->length+other->length-1))
@@ -97,7 +99,6 @@ bool string_adjust_size(String* string, size_t size)
}
void delete_string(String* string)
{
free(string->chars);
▾Msrc/test.c
@@ -65,13 +65,16 @@ static void test1(void)
static void test2(void)
{
String* test = new_string();
String* test;
String* test2;
char* cstring;
string_append(test, 'a');
string_append(test, 'b');
string_append(test, 'c');
string_append(test, 'd');
test = new_string();
string_push(test, 'a');
string_push(test, 'b');
string_push(test, 'c');
string_push(test, 'd');
printf("%ld\n", test->length);
cstring = to_cstring(test);