74 lines
1.1 KiB
C
74 lines
1.1 KiB
C
#include "str.h"
|
|
|
|
void str_init(str_t* self)
|
|
{
|
|
assert(self);
|
|
self->size = 0;
|
|
self->capacity = 0;
|
|
self->value = NULL;
|
|
}
|
|
|
|
void str_free(str_t* self)
|
|
{
|
|
assert(self);
|
|
|
|
if (self->value)
|
|
{
|
|
free(self->value);
|
|
}
|
|
}
|
|
|
|
ssize_t str_find(str_t* self, char c)
|
|
{
|
|
assert(self);
|
|
|
|
for (size_t i=0; i<self->size; i++)
|
|
{
|
|
if (self->value[i] == c)
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
void str_push(str_t* self, char c)
|
|
{
|
|
assert(self);
|
|
|
|
if (self->value == NULL)
|
|
{
|
|
self->capacity = 1;
|
|
self->value = malloc(sizeof(char) * self->capacity);
|
|
}
|
|
|
|
if (self->size + 2 >= self->capacity)
|
|
{
|
|
self->capacity *= 2;
|
|
self->value = realloc(
|
|
self->value,
|
|
sizeof(char) * self->capacity
|
|
);
|
|
}
|
|
|
|
self->value[self->size] = c;
|
|
self->size++;
|
|
self->value[self->size] = '\0';
|
|
}
|
|
|
|
void str_push_cstr(str_t* self, char const* rhs)
|
|
{
|
|
assert(self);
|
|
|
|
if (!rhs)
|
|
{
|
|
return;
|
|
}
|
|
|
|
for (size_t i=0; i<strlen(rhs); i++)
|
|
{
|
|
str_push(self, rhs[i]);
|
|
}
|
|
}
|