summaryrefslogtreecommitdiff
path: root/src/str.c
diff options
context:
space:
mode:
authorMichael Jennings <mej@kainx.org>2002-04-11 22:04:55 +0000
committerMichael Jennings <mej@kainx.org>2002-04-11 22:04:55 +0000
commit04d9c1d902fdf0b1338ea2104c5a518f8e456f45 (patch)
tree22667696a3f1ff5b2b8cdfebeb57f5a90a87ea22 /src/str.c
parent8d1ed1ade466c6c33983aaba1f152ee632ea27bf (diff)
downloadlibast-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.c32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/str.c b/src/str.c
index 83c628e..e9c2cc6 100644
--- a/src/str.c
+++ b/src/str.c
@@ -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);
}