- info->term_index_s = info->rset_l->no_rset_terms;
- ct->no_rset_terms =
- info->rset_l->no_rset_terms +
- info->rset_m->no_rset_terms +
- info->rset_r->no_rset_terms;
- ct->rset_terms = (RSET_TERM *)
- xmalloc (sizeof (*ct->rset_terms) * ct->no_rset_terms);
-
- memcpy (ct->rset_terms, info->rset_l->rset_terms,
- info->rset_l->no_rset_terms * sizeof(*ct->rset_terms));
- memcpy (ct->rset_terms + info->rset_l->no_rset_terms,
- info->rset_m->rset_terms,
- info->rset_m->no_rset_terms * sizeof(*ct->rset_terms));
- memcpy (ct->rset_terms + info->rset_l->no_rset_terms +
- info->rset_m->no_rset_terms,
- info->rset_r->rset_terms,
- info->rset_r->no_rset_terms * sizeof(*ct->rset_terms));
- return info;
+ if (!log_level_initialized)
+ {
+ log_level = yaz_log_module_level("rsbetween");
+ log_level_initialized = 1;
+ }
+ rsetarray[STARTTAG] = rset_l;
+ rsetarray[HIT] = rset_m;
+ rsetarray[STOPTAG] = rset_r;
+ rsetarray[ATTRTAG] = rset_attr;
+
+ /* make sure we have decent terms for all rsets. Create dummies if needed*/
+ checkterm( rsetarray[STARTTAG], "(start)",nmem);
+ checkterm( rsetarray[STOPTAG], "(start)",nmem);
+ info->startterm = rsetarray[STARTTAG]->term;
+ info->stopterm = rsetarray[STOPTAG]->term;
+
+ if (rset_attr)
+ {
+ checkterm( rsetarray[ATTRTAG], "(start)",nmem);
+ info->attrterm = rsetarray[ATTRTAG]->term;
+ n = 4;
+ }
+ else
+ {
+ info->attrterm = NULL;
+ n = 3;
+ }
+ info->andset = rsmulti_and_create( nmem, kcontrol, scope, n, rsetarray);
+ rnew->priv = info;
+ yaz_log(log_level,"create rset at %p",rnew);
+ return rnew;
+}
+
+
+static void r_delete (RSET ct)
+{
+ struct rset_between_info *info = (struct rset_between_info *) ct->priv;
+ yaz_log(log_level,"delete rset at %p",ct);
+ rset_delete(info->andset);