X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=rset%2Frset.c;h=392a585030dae829ae216cc4325214e628242f0a;hb=ac248aaee0b0be972370f6bab8e383302f3af6d3;hp=e0d1d8089c732add50f06552ffa9e08ade0b62bf;hpb=bfaff2a3d97a1980b3318fedf628222ebf1a7225;p=idzebra-moved-to-github.git diff --git a/rset/rset.c b/rset/rset.c index e0d1d80..392a585 100644 --- a/rset/rset.c +++ b/rset/rset.c @@ -4,7 +4,13 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: rset.c,v $ - * Revision 1.10 1998-02-10 11:56:46 adam + * Revision 1.12 1998-04-26 10:56:57 adam + * Added include of string.h. + * + * Revision 1.11 1998/03/05 08:36:28 adam + * New result set model. + * + * Revision 1.10 1998/02/10 11:56:46 adam * Implemented rset_dup. * * Revision 1.9 1996/10/29 13:55:21 adam @@ -44,20 +50,27 @@ */ #include +#include #include #include -RSET rset_create(const rset_control *sel, void *parms) +RSET rset_create(const struct rset_control *sel, void *parms) { RSET rnew; + int i; logf (LOG_DEBUG, "rs_create(%s)", sel->desc); rnew = xmalloc(sizeof(*rnew)); rnew->control = sel; rnew->flags = 0; rnew->count = 1; - rnew->buf = (*sel->f_create)(sel, parms, &rnew->flags); + rnew->rset_terms = NULL; + rnew->no_rset_terms = 0; + rnew->buf = (*sel->f_create)(rnew, sel, parms); + logf (LOG_DEBUG, "no_rset_terms: %d", rnew->no_rset_terms); + for (i = 0; ino_rset_terms; i++) + logf (LOG_DEBUG, " %s", rnew->rset_terms[i]->name); return rnew; } @@ -65,8 +78,10 @@ void rset_delete (RSET rs) { (rs->count)--; if (!rs->count) + { (*rs->control->f_delete)(rs); - xfree(rs); + xfree(rs); + } } RSET rset_dup (RSET rs) @@ -74,3 +89,52 @@ RSET rset_dup (RSET rs) (rs->count)++; return rs; } + +RSET_TERM *rset_terms(RSET rs, int *no) +{ + *no = rs->no_rset_terms; + return rs->rset_terms; +} + +RSET_TERM rset_term_create (const char *name, int length, const char *flags) +{ + RSET_TERM t = xmalloc (sizeof(*t)); + if (!name) + t->name = NULL; + else if (length == -1) + t->name = xstrdup (name); + else + { + t->name = xmalloc (length+1); + memcpy (t->name, name, length); + t->name[length] = '\0'; + } + if (!flags) + t->flags = NULL; + else + t->flags = xstrdup (flags); + t->nn = 1; + return t; +} + +void rset_term_destroy (RSET_TERM t) +{ + xfree (t->name); + xfree (t->flags); + xfree (t); +} + +RSET_TERM rset_term_dup (RSET_TERM t) +{ + RSET_TERM nt = xmalloc (sizeof(*nt)); + if (t->name) + nt->name = xstrdup (t->name); + else + nt->name = NULL; + if (t->flags) + nt->flags = xstrdup (t->flags); + else + nt->flags = NULL; + nt->nn = t->nn; + return nt; +}