-
-typedef struct _Datamatcher {
- int flags;
- const char *match;
- void *matchdata;
- int error;
-} Datamatcher;
-
-typedef struct _Dataiterator
-{
- int state;
- int flags;
-
- Pool *pool;
- Repo *repo;
- Repodata *data;
-
- /* data pointers */
- unsigned char *dp;
- unsigned char *ddp;
- Id *idp;
- Id *keyp;
-
- /* the result */
- Repokey *key;
- KeyValue kv;
-
- /* our matcher */
- Datamatcher matcher;
-
- /* iterators/filters */
- Id keyname;
- Id repodataid;
- Id solvid;
- Id repoid;
-
- Id keynames[3 + 1];
- int nkeynames;
- int rootlevel;
-
- /* recursion data */
- struct di_parent {
- KeyValue kv;
- unsigned char *dp;
- Id *keyp;
- } parents[3];
- int nparents;
-
-} Dataiterator;
-
-int datamatcher_init(Datamatcher *ma, const char *match, int flags);
-void datamatcher_free(Datamatcher *ma);
-int datamatcher_match(Datamatcher *ma, const char *str);
-
-/*
- * Dataiterator
- *
- * Iterator like interface to 'search' functionality
- *
- * Dataiterator is per-pool, additional filters can be applied
- * to limit the search domain. See dataiterator_init below.
- *
- * Use these like:
- * Dataiterator di;
- * dataiterator_init(&di, repo->pool, repo, 0, 0, "bla", SEARCH_SUBSTRING);
- * while (dataiterator_step(&di))
- * dosomething(di.solvid, di.key, di.kv);
- * dataiterator_free(&di);
- */
-
-/*
- * Initialize dataiterator
- *
- * di: Pointer to Dataiterator to be initialized
- * pool: Search domain for the iterator
- * repo: if non-null, limit search to this repo
- * solvid: if non-null, limit search to this solvable
- * keyname: if non-null, limit search to this keyname
- * match: if non-null, limit search to this match
- */
-int dataiterator_init(Dataiterator *di, Pool *pool, Repo *repo, Id p, Id keyname, const char *match, int flags);
-void dataiterator_init_clone(Dataiterator *di, Dataiterator *from);
-void dataiterator_set_search(Dataiterator *di, Repo *repo, Id p);
-void dataiterator_set_keyname(Dataiterator *di, Id keyname);
-int dataiterator_set_match(Dataiterator *di, const char *match, int flags);
-
-void dataiterator_prepend_keyname(Dataiterator *di, Id keyname);
-void dataiterator_free(Dataiterator *di);
-int dataiterator_step(Dataiterator *di);
-void dataiterator_setpos(Dataiterator *di);
-void dataiterator_setpos_parent(Dataiterator *di);
-int dataiterator_match(Dataiterator *di, Datamatcher *ma);
-void dataiterator_skip_attribute(Dataiterator *di);
-void dataiterator_skip_solvable(Dataiterator *di);
-void dataiterator_skip_repo(Dataiterator *di);
-void dataiterator_jump_to_solvid(Dataiterator *di, Id solvid);
-void dataiterator_jump_to_repo(Dataiterator *di, Repo *repo);
-void dataiterator_entersub(Dataiterator *di);
-void dataiterator_clonepos(Dataiterator *di, Dataiterator *from);
-void dataiterator_seek(Dataiterator *di, int whence);
-
-#define DI_SEEK_STAY (1 << 16)
-#define DI_SEEK_CHILD 1
-#define DI_SEEK_PARENT 2
-#define DI_SEEK_REWIND 3
-