Author: mlschroe Date: Thu Oct 9 16:15:51 2008 New Revision: 11285 URL: http://svn.opensuse.org/viewcvs/zypp?rev=11285&view=rev Log: - move search position into pool - add dataiterator_setpos() Modified: trunk/sat-solver/src/pool.h trunk/sat-solver/src/repo.h trunk/sat-solver/src/repodata.c trunk/sat-solver/src/repodata.h Modified: trunk/sat-solver/src/pool.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/pool.h?rev=11285&r1=11284&r2=11285&view=diff ============================================================================== --- trunk/sat-solver/src/pool.h (original) +++ trunk/sat-solver/src/pool.h Thu Oct 9 16:15:51 2008 @@ -43,6 +43,13 @@ struct _Repokey; struct _KeyValue; +typedef struct _Repopos { + struct _Repo *repo; + Id repodataid; + Id schema; + Id dp; +} Repopos; + struct _Pool { struct _Stringpool ss; @@ -99,6 +106,9 @@ /* load callback */ FILE * (*loadcallback)(struct _Pool *, struct _Repodata *, void *); void *loadcallbackdata; + + /* search position */ + Repopos pos; }; #define SAT_FATAL (1<<0) Modified: trunk/sat-solver/src/repo.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repo.h?rev=11285&r1=11284&r2=11285&view=diff ============================================================================== --- trunk/sat-solver/src/repo.h (original) +++ trunk/sat-solver/src/repo.h Thu Oct 9 16:15:51 2008 @@ -279,6 +279,7 @@ 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); Modified: trunk/sat-solver/src/repodata.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repodata.c?rev=11285&r1=11284&r2=11285&view=diff ============================================================================== --- trunk/sat-solver/src/repodata.c (original) +++ trunk/sat-solver/src/repodata.c Thu Oct 9 16:15:51 2008 @@ -457,8 +457,13 @@ 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 { @@ -728,17 +733,22 @@ } 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; } } @@ -1193,6 +1203,15 @@ } 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) Modified: trunk/sat-solver/src/repodata.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repodata.h?rev=11285&r1=11284&r2=11285&view=diff ============================================================================== --- trunk/sat-solver/src/repodata.h (original) +++ trunk/sat-solver/src/repodata.h Thu Oct 9 16:15:51 2008 @@ -40,11 +40,6 @@ long file_size; } Attrblobpage; -typedef struct _Repopos { - Id schema; - Id dp; -} Repopos; - typedef struct _Repodata { struct _Repo *repo; /* back pointer to repo */ @@ -118,8 +113,6 @@ Id lastkey; Id lastdatalen; - Repopos pos; - } Repodata; #define REPOENTRY_META -1 -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org