- RSET rnew=rset_create_base(&control, nmem);
- struct rset_between_info *info;
- info = (struct rset_between_info *) nmem_malloc(rnew->nmem,sizeof(*info));
- info->key_size = key_size;
- info->rset_l = rset_l;
- info->rset_m = rset_m;
- info->rset_r = rset_r;
- info->rset_attr = rset_attr;
- info->cmp = cmp;
- info->printer = printer;
-
- rnew->priv=info;
+ RSET rnew = rset_create_base(&control, nmem, kcontrol, scope, 0, 0, 0);
+ struct rset_between_info *info=
+ (struct rset_between_info *) nmem_malloc(rnew->nmem,sizeof(*info));
+ RSET rsetarray[4];
+ int n = 4;
+
+ 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;
+ }
+ rnew->no_children = 1;
+ rnew->children = nmem_malloc(rnew->nmem, sizeof(RSET *));
+ rnew->children[0] = rset_create_and(nmem, kcontrol,
+ scope, n, rsetarray);
+ rnew->priv = info;
+ yaz_log(log_level, "create rset at %p", rnew);