X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-live.git;a=blobdiff_plain;f=yarrg%2Frssearch.c;h=6674c02952a263dde69b7c4c1838e737f2a8a63d;hp=fa43d8939d26a250c61c3108c9b30194d79c058a;hb=d0f65e91f071ebb0fbc6791ee168e2be5ba8e5ae;hpb=2d200537436a446c0fd7d62921f5a5fec231a696 diff --git a/yarrg/rssearch.c b/yarrg/rssearch.c index fa43d89..6674c02 100644 --- a/yarrg/rssearch.c +++ b/yarrg/rssearch.c @@ -23,7 +23,8 @@ static Neighbour *get_neighbours(int isle) { SQL_BIND(ss_neigh, 1, isle); while (SQL_STEP(ss_neigh)) { - Neighbour *add= mmalloc(sizeof(*add)); + Neighbour *add; + NEW(add); add->islandid= sqlite3_column_int(ss_neigh, 0); add->dist= sqlite3_column_int(ss_neigh, 1); add->next= head; @@ -39,6 +40,12 @@ static Neighbour *get_neighbours(int isle) { static PotentialResult ***strat_base; +static inline int isle2arch(int isle) { + int arch= islandid2arch[isle]; + assert(arch>=0); + return arch; +} + static double process_route(int nports, int totaldist, double overestimate_excepting_tail) { int i; @@ -51,11 +58,11 @@ static double process_route(int nports, int totaldist, debugf(" %d",ports[i]); debugf("\n"); - int finalisle= ports[nports-1]; - int midisle= ports[nports/2]; + int finisle= ports[nports-1]; int finarch= isle2arch(finisle); + int midisle= ports[nports/2]; int midarch= isle2arch(midisle); - PotentialResult **strat_fin= ONDEMAND(strat_base[finalisle], islandtablesz); - PotentialResult *strat= ONDEMAND(strat_fin[midisle], 1); + PotentialResult **strat_fin= ONDEMAND(strat_base[finarch], narches); + PotentialResult *strat= ONDEMAND(strat_fin[midarch], 1); if (nports>=2) { int pair[2], i; @@ -94,7 +101,7 @@ static double process_route(int nports, int totaldist, debugf(" SOMEHOW BEST\n"); - fildebugf("final %3d mid %3d ",finalisle,midisle); + fildebugf("final %d:%3d mid %d:%3d ",finarch,finisle,midarch,midisle); #define CHK(absperl) \ fildebugf(#absperl " %15f", absperl); \ @@ -136,7 +143,7 @@ static void recurse(int last_isle, } void search(int start_isle, PotentialResult ****strat_base_io) { - strat_base= ONDEMAND(*strat_base_io, islandtablesz); + strat_base= ONDEMAND(*strat_base_io, narches); recurse(start_isle,0,0,1e6); } @@ -146,7 +153,7 @@ char **archnames; int *islandid2arch; void setup_search(void) { - neighbours= mcalloc(sizeof(*neighbours) * islandtablesz); + MCALLOC(neighbours, islandtablesz); SQL_PREPARE(ss_neigh, "SELECT biid, dist FROM routes WHERE aiid=?"); @@ -156,10 +163,8 @@ void setup_search(void) { " SELECT DISTINCT archipelago\n" " FROM islands\n" " )"); - archnames= mcalloc(sizeof(*archnames) * max_narches); - islandid2arch= mmalloc(sizeof(*islandid2arch) * islandtablesz); - int i; - for (i=0; i