Author: mlschroe Date: Wed May 7 19:00:21 2008 New Revision: 9983 URL: http://svn.opensuse.org/viewcvs/zypp?rev=9983&view=rev Log: - speed up array creation a bit by caching last values Modified: trunk/sat-solver/src/repodata.c trunk/sat-solver/src/repodata.h Modified: trunk/sat-solver/src/repodata.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repodata.c?rev=9983&r1=9982&r2=9983&view=diff ============================================================================== --- trunk/sat-solver/src/repodata.c (original) +++ trunk/sat-solver/src/repodata.c Wed May 7 19:00:21 2008 @@ -1405,6 +1405,14 @@ int oldsize; Id *ida, *pp; + if (handle == data->lasthandle && data->keys[data->lastkey].name == keyname && data->keys[data->lastkey].type == keytype && data->attriddatalen == data->lastdatalen) + { + /* great! just append the new data */ + data->attriddata = sat_extend(data->attriddata, data->attriddatalen, entrysize, sizeof(Id), REPODATA_ATTRIDDATA_BLOCK); + data->attriddatalen--; /* overwrite terminating 0 */ + data->lastdatalen += entrysize; + return; + } pp = data->structs[handle]; if (pp) for (; *pp; pp += 2) @@ -1420,6 +1428,7 @@ key.storage = KEY_STORAGE_INCORE; data->attriddata = sat_extend(data->attriddata, data->attriddatalen, entrysize + 1, sizeof(Id), REPODATA_ATTRIDDATA_BLOCK); repodata_set(data, handle, &key, data->attriddatalen); + data->lasthandle = 0; /* next time... */ return; } oldsize = 0; @@ -1439,6 +1448,9 @@ pp[1] = data->attriddatalen; data->attriddatalen += oldsize; } + data->lasthandle = handle; + data->lastkey = *pp; + data->lastdatalen = data->attriddatalen + entrysize + 1; } static inline int @@ -1998,6 +2010,9 @@ if (data->structs[entry]) sat_free(data->structs[entry]); data->structs = sat_free(data->structs); + data->lasthandle = 0; + data->lastkey = 0; + data->lastdatalen = 0; sat_free(schema); sat_free(seen); Modified: trunk/sat-solver/src/repodata.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repodata.h?rev=9983&r1=9982&r2=9983&view=diff ============================================================================== --- trunk/sat-solver/src/repodata.h (original) +++ trunk/sat-solver/src/repodata.h Wed May 7 19:00:21 2008 @@ -111,6 +111,11 @@ Id **structs; /* key-value lists */ unsigned int nstructs; + /* array cache */ + Id lasthandle; + Id lastkey; + Id lastdatalen; + Id *addedfileprovides; } Repodata; -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org