X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=include%2Fcstring.h;h=d0a7c1cd469a03a069bfa7fc9ffa6ce26e611be1;hb=aaef0d22541650ed73e094363e1886943ca035d3;hp=b87bc8d4d56ae8a8dd94dbd6466ea7628adb2f41;hpb=71843db5886f60d3959d966a5e062a516c24798e;p=smdp.git
diff --git a/include/cstring.h b/include/cstring.h
index b87bc8d..d0a7c1c 100644
--- a/include/cstring.h
+++ b/include/cstring.h
@@ -2,12 +2,32 @@
#define CSTRING_H
/*
- * A implementation of expandable c strings in heap memory.
+ * An implementation of expandable c strings in heap memory.
+ * Copyright (C) 2014 Michael Goehler
+ *
+ * This file is part of mdp.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
*
* struct: cstring_t which defines a expandable c string type in heap memory
*
* function: cstring_init to intialize struct of type cstring_t
- * function: cstring_t->expand to add one character to the string
+ * function: cstring_t->expand to add one character to the struct
+ * function: cstring_t->expand_arr to add a string to the struct
+ * function: cstring_t->strip to remove a substring
+ * function: cstring_t->reset to clear and reuse the struct
* function: cstring_t->delete to free the allocated memory
*
* Example:
@@ -17,9 +37,6 @@
*
*/
-#include // strlen
-#include // malloc, realloc
-
// The amount of memory allocated from heap when string expansion hits the
// allocated memory limit
#define REALLOC_ADD 10
@@ -30,46 +47,16 @@ typedef struct _cstring_t {
size_t alloc;
void (*expand)(struct _cstring_t *self, char x);
void (*expand_arr)(struct _cstring_t *self, char *x);
+ void (*strip)(struct _cstring_t *self, int pos, int len);
+ void (*reset)(struct _cstring_t *self);
void (*delete)(struct _cstring_t *self);
} cstring_t;
+cstring_t *cstring_init();
void cstring_expand(cstring_t *self, char x);
void cstring_expand_arr(cstring_t *self, char *x);
+void cstring_strip(cstring_t *self, int pos, int len);
+void cstring_reset(cstring_t *self);
void cstring_delete(cstring_t *self);
-cstring_t *cstring_init() {
- cstring_t *x = malloc(sizeof(cstring_t));
- x->text = (void*)0;
- x->size = x->alloc = 0;
- x->expand = cstring_expand;
- x->expand_arr = cstring_expand_arr;
- x->delete = cstring_delete;
- return x;
-}
-
-void cstring_expand(cstring_t *self, char x) {
- if(self->size + sizeof(x) + sizeof(char) > self->alloc) {
- self->alloc += (REALLOC_ADD * sizeof(char));
- self->text = realloc(self->text, self->alloc);
- }
- self->text[self->size] = x;
- self->text[self->size+1] = '\0';
- self->size = strlen(self->text);
-}
-
-void cstring_expand_arr(cstring_t *self, char *x) {
- if(self->size + strlen(x) + sizeof(char) > self->alloc) {
- self->alloc += (REALLOC_ADD * sizeof(char));
- self->text = realloc(self->text, self->alloc);
- }
- self->text = strcat(self->text, x);
- self->size = strlen(self->text);
-}
-
-
-void cstring_delete(cstring_t *self) {
- free(self->text);
- free(self);
-}
-
#endif // !defined( CSTRING_H )