chiark / gitweb /
WIP routesearch; construct archipelago lookup table
[ypp-sc-tools.web-live.git] / yarrg / rssearch.c
index 0a17adfd8d79f564afcd1d98549baa8be541f341..fa43d8939d26a250c61c3108c9b30194d79c058a 100644 (file)
@@ -140,9 +140,43 @@ void search(int start_isle, PotentialResult ****strat_base_io) {
   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);
 }