diff options
author | Michael Jennings <mej@kainx.org> | 2002-04-11 22:04:55 +0000 |
---|---|---|
committer | Michael Jennings <mej@kainx.org> | 2002-04-11 22:04:55 +0000 |
commit | 04d9c1d902fdf0b1338ea2104c5a518f8e456f45 (patch) | |
tree | 22667696a3f1ff5b2b8cdfebeb57f5a90a87ea22 /src/str.c | |
parent | 8d1ed1ade466c6c33983aaba1f152ee632ea27bf (diff) | |
download | libast-04d9c1d902fdf0b1338ea2104c5a518f8e456f45.tar.gz |
Thu Apr 11 18:03:46 2002 Michael Jennings (mej)
The list interface is complete (for now) as is its first
implementation: the linked_list class. Unit tests are also in.
SVN revision: 6127
Diffstat (limited to 'src/str.c')
-rw-r--r-- | src/str.c | 32 |
1 files changed, 25 insertions, 7 deletions
@@ -30,7 +30,7 @@ static const char cvs_ident[] = "$Id$"; #include <libast_internal.h> /* *INDENT-OFF* */ -spif_const_class_t SPIF_CLASS_VAR(str) = { +static spif_const_class_t s_class = { SPIF_DECL_CLASSNAME(str), (spif_newfunc_t) spif_str_new, (spif_memberfunc_t) spif_str_init, @@ -41,6 +41,7 @@ spif_const_class_t SPIF_CLASS_VAR(str) = { (spif_func_t) spif_str_dup, (spif_func_t) spif_str_type }; +spif_class_t SPIF_CLASS_VAR(str) = &s_class; /* *INDENT-ON* */ const size_t buff_inc = 4096; @@ -107,7 +108,7 @@ spif_bool_t spif_str_init(spif_str_t self) { spif_obj_init(SPIF_OBJ(self)); - spif_obj_set_class(SPIF_OBJ(self), &SPIF_CLASS_VAR(str)); + spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(str)); self->s = SPIF_NULL_TYPE(charptr); self->len = 0; self->mem = 0; @@ -117,6 +118,8 @@ spif_str_init(spif_str_t self) spif_bool_t spif_str_init_from_ptr(spif_str_t self, spif_charptr_t old) { + spif_obj_init(SPIF_OBJ(self)); + spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(str)); self->len = strlen(SPIF_CONST_CAST_C(char *) old); self->mem = self->len + 1; self->s = SPIF_CAST(charptr) MALLOC(self->mem); @@ -127,6 +130,8 @@ spif_str_init_from_ptr(spif_str_t self, spif_charptr_t old) spif_bool_t spif_str_init_from_buff(spif_str_t self, spif_charptr_t buff, size_t size) { + spif_obj_init(SPIF_OBJ(self)); + spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(str)); self->mem = size; self->len = strnlen(SPIF_CONST_CAST_C(char *) buff, size); if (self->mem == self->len) { @@ -143,6 +148,8 @@ spif_str_init_from_fp(spif_str_t self, FILE * fp) { spif_charptr_t p, end = NULL; + spif_obj_init(SPIF_OBJ(self)); + spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(str)); self->mem = buff_inc; self->len = 0; self->s = SPIF_CAST(charptr) MALLOC(self->mem); @@ -171,6 +178,8 @@ spif_str_init_from_fd(spif_str_t self, int fd) int n; spif_charptr_t p; + spif_obj_init(SPIF_OBJ(self)); + spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(str)); self->mem = buff_inc; self->len = 0; self->s = SPIF_CAST(charptr) MALLOC(self->mem); @@ -457,15 +466,24 @@ spif_str_set_len(spif_str_t self, size_t len) #endif } -spif_bool_t -spif_str_show(spif_str_t self, spif_charptr_t name) +spif_str_t +spif_str_show(spif_str_t self, spif_charptr_t name, spif_str_t buff, size_t indent) { - printf("(spif_str_t) %s: { \"%s\", len %lu, size %lu }\n", name, self->s, (unsigned long) self->len, (unsigned long) self->mem); - return TRUE; + char tmp[4096]; + + memset(tmp, ' ', indent); + snprintf(tmp + indent, sizeof(tmp) - indent, "(spif_str_t) %s: { \"%s\", len %lu, size %lu }\n", + name, self->s, (unsigned long) self->len, (unsigned long) self->mem); + if (SPIF_STR_ISNULL(buff)) { + buff = spif_str_new_from_ptr(tmp); + } else { + spif_str_append_from_ptr(buff, tmp); + } + return buff; } spif_classname_t spif_str_type(spif_str_t self) { - return (SPIF_CAST(classname) (self)); + return SPIF_OBJ_CLASSNAME(self); } |