const char *match, int flags);
void dataiterator_free(Dataiterator *di);
int dataiterator_step(Dataiterator *di);
+void dataiterator_setpos(Dataiterator *di);
int dataiterator_match(Dataiterator *di, int flags, const void *match);
void dataiterator_skip_attribute(Dataiterator *di);
void dataiterator_skip_solvable(Dataiterator *di);
dp += 1;
else if (entry == REPOENTRY_POS) /* META */
{
- *schemap = data->pos.schema;
- return data->incoredata + data->pos.dp;
+ Pool *pool = data->repo->pool;
+ if (data->repo != pool->pos.repo)
+ return 0;
+ if (data != data->repo->repodata + pool->pos.repodataid)
+ return 0;
+ *schemap = pool->pos.schema;
+ return data->incoredata + pool->pos.dp;
}
else
{
}
void
-repodata_set_pos_kv(Repodata *data, KeyValue *kv)
+repodata_setpos_kv(Repodata *data, KeyValue *kv)
{
+ Pool *pool = data->repo->pool;
if (!kv)
{
- data->pos.dp = 0;
- data->pos.schema = 0;
+ pool->pos.repo = 0;
+ pool->pos.repodataid = 0;
+ pool->pos.dp = 0;
+ pool->pos.schema = 0;
}
else
{
- data->pos.dp = (unsigned char *)kv->str - data->incoredata;
- data->pos.schema = kv->id;
+ pool->pos.repo = 0;
+ pool->pos.repodataid = data - data->repo->repodata;
+ pool->pos.dp = (unsigned char *)kv->str - data->incoredata;
+ pool->pos.schema = kv->id;
}
}
}
void
+dataiterator_setpos(Dataiterator *di)
+{
+ di->pool->pos.repo = di->repo;
+ di->pool->pos.repodataid = di->data - di->repo->repodata;
+ di->pool->pos.schema = di->kv.id;
+ di->pool->pos.dp = (unsigned char *)di->kv.str - di->data->incoredata;
+}
+
+void
dataiterator_skip_attribute(Dataiterator *di)
{
if (di->state == di_nextsolvableattr)
long file_size;
} Attrblobpage;
-typedef struct _Repopos {
- Id schema;
- Id dp;
-} Repopos;
-
typedef struct _Repodata {
struct _Repo *repo; /* back pointer to repo */
Id lastkey;
Id lastdatalen;
- Repopos pos;
-
} Repodata;
#define REPOENTRY_META -1