-typedef struct _Dataiterator
-{
- Repodata *data;
- Id *keyp;
- unsigned char *nextkeydp;
- unsigned char *dp;
- Repokey *key;
- Repo *repo;
- Id *idp;
- const char *match;
- Id solvid;
- Id keyname;
- unsigned flags;
- unsigned state;
- KeyValue kv;
- regex_t regex;
- int regex_err;
-} Dataiterator;
-
-/* Use these like:
- Dataiterator di;
- dataiterator_init(&di, repo, 0, 0, "bla", SEARCH_SUBSTRING);
- while (dataiterator_step(&di))
- dosomething(di.solvid, di.key, di.kv); */
-void dataiterator_init(Dataiterator *di, Repo *repo, Id p, Id keyname,
- const char *match, int flags);
-int dataiterator_step(Dataiterator *di);
-int dataiterator_match(Dataiterator *di, int flags, const void *match);
-void dataiterator_skip_attribute(Dataiterator *di);
-void dataiterator_skip_solvable(Dataiterator *di);
-void dataiterator_skip_repo(Dataiterator *di);
-void dataiterator_jump_to_solvable(Dataiterator *di, Solvable *s);
-void dataiterator_jump_to_repo(Dataiterator *di, Repo *repo);
+/* returns the string value of the attribute, or NULL if not found */
+Id repo_lookup_type(Repo *repo, Id entry, Id keyname);
+const char *repo_lookup_str(Repo *repo, Id entry, Id keyname);
+/* returns the integer value of the attribute, or notfound if not found */
+unsigned long long repo_lookup_num(Repo *repo, Id entry, Id keyname, unsigned long long notfound);
+Id repo_lookup_id(Repo *repo, Id entry, Id keyname);
+int repo_lookup_idarray(Repo *repo, Id entry, Id keyname, Queue *q);
+int repo_lookup_deparray(Repo *repo, Id entry, Id keyname, Queue *q, Id marker);
+int repo_lookup_void(Repo *repo, Id entry, Id keyname);
+const char *repo_lookup_checksum(Repo *repo, Id entry, Id keyname, Id *typep);
+const unsigned char *repo_lookup_bin_checksum(Repo *repo, Id entry, Id keyname, Id *typep);
+const void *repo_lookup_binary(Repo *repo, Id entry, Id keyname, int *lenp);
+unsigned int repo_lookup_count(Repo *repo, Id entry, Id keyname); /* internal */
+Id solv_depmarker(Id keyname, Id marker);