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;
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;
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;
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); \
}
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);
}
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=?");
" SELECT DISTINCT archipelago\n"
" FROM islands\n"
" )");
- archnames= mcalloc(sizeof(*archnames) * max_narches);
- islandid2arch= mmalloc(sizeof(*islandid2arch) * islandtablesz);
- int i;
- for (i=0; i<islandtablesz; i++) islandid2arch[i]=-1;
+ MCALLOC(archnames, max_narches);
+ MCALLOC_INITEACH(islandid2arch, islandtablesz, *this=-1);
sqlite3_stmt *archs;
SQL_PREPARE(archs,