recurse(start_isle,0,0,1e6);
}
+
+int narches;
+char **archnames;
+int *islandid2arch;
+
void setup_search(void) {
neighbours= mcalloc(sizeof(*neighbours) * islandtablesz);
SQL_PREPARE(ss_neigh,
"SELECT biid, dist FROM routes WHERE aiid=?");
+
+ int max_narches=
+ sql_single_int(" SELECT count(*) FROM (\n"
+ " 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;
+
+ sqlite3_stmt *archs;
+ SQL_PREPARE(archs,
+ " SELECT islandid, archipelago\n"
+ " FROM islands\n"
+ " ORDER BY archipelago");
+ while (SQL_STEP(archs)) {
+ int isle= sqlite3_column_int(archs,0);
+ const char *archname= (const char*)sqlite3_column_text(archs,1);
+ int arch;
+ for (arch=0; arch<narches; arch++)
+ if (!strcmp(archnames[arch], archname)) goto found;
+ assert(narches < max_narches);
+ arch= narches++;
+ archnames[arch]= masprintf("%s",archname);
+ found:
+ islandid2arch[isle]= arch;
+ }
+ sqlite3_finalize(archs);
}