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, int flags, const void *match);
void dataiterator_skip_attribute(Dataiterator *di);
void dataiterator_skip_solvable(Dataiterator *di);
if (p == SOLVID_POS)
{
di->repo = di->pool->pos.repo;
+ if (!di->repo)
+ {
+ di->state = di_bye;
+ return;
+ }
di->data = di->repo->repodata + di->pool->pos.repodataid;
di->repoid = -1;
di->repodataid = -1;
void
dataiterator_setpos(Dataiterator *di)
{
+ if (di->kv.eof)
+ {
+ memset(&di->pool->pos, 0, sizeof(di->pool->pos));
+ return;
+ }
di->pool->pos.repo = di->repo;
di->pool->pos.repodataid = di->data - di->repo->repodata;
di->pool->pos.schema = di->kv.id;
}
void
+dataiterator_setpos_parent(Dataiterator *di)
+{
+ if (!di->kv.parent)
+ {
+ memset(&di->pool->pos, 0, sizeof(di->pool->pos));
+ return;
+ }
+ di->pool->pos.repo = di->repo;
+ di->pool->pos.repodataid = di->data - di->repo->repodata;
+ di->pool->pos.schema = di->kv.parent->id;
+ di->pool->pos.dp = (unsigned char *)di->kv.parent->str - di->data->incoredata;
+}
+
+void
dataiterator_skip_attribute(Dataiterator *di)
{
if (di->state == di_nextsolvableattr)