- list<dobj*>::iterator eid = tp->dop.end();
- list<dobj*>::iterator id = tp->dop.begin();
- while( id!=eid && *(*id)->name!=knm ) ++id;
- if( id == eid ) {
- fprintf(stderr," error: cant find index key %s in %s\n",knm,tp->name->c_str());
- continue;
- }
+void dir_rcmpr(FILE *sp, tobj *tp, iobj *ip)
+{
+ dobjs::iterator ekey=ip->keys.end();
+ dobjs::iterator key=ip->keys.begin();
+
+ while( key != ekey ) {
+ dobj *dp = *key++;
+ fprintf(sp," { %s vv", typ_dobj(dp));
+ if( dp->length > 0 ) fprintf(sp, "[%d]", dp->length);
+ fprintf(sp,"; memcpy(&vv,b,sizeof(vv)); b += sizeof(vv);\n");
+ fprintf(sp," int v = cmpr_%s", put_cmpr(dp));
+ const char *nm = dp->name->c_str();
+ fprintf(sp,"( kloc._%s(), kloc->v_%s.size(), &vv", nm, nm);
+ if( dp->length > 0 ) fprintf(sp, "[0]");
+ fprintf(sp,", sizeof(vv));\n");
+ fprintf(sp," if( v != 0 ) return v; }\n");
+ }
+ if( ip->unique <= 0 ) {
+ fprintf(sp," int vid; memcpy(&vid,b,sizeof(vid)); b += sizeof(vid);\n");
+ fprintf(sp," int v = cmpr_int(kloc._id(), kloc._id_size(), &vid, sizeof(vid));\n");
+ fprintf(sp," if( v != 0 ) return v;\n");
+ }
+}