@@ -1462,7 +1462,6 @@ template <
14621462 typename Distance,
14631463 typename ThreadPoolProto>
14641464auto auto_dynamic_assemble (
1465- const lib::detail::Deserializer& deserializer,
14661465 std::istream& is,
14671466 LazyGraphLoader graph_loader,
14681467 LazyDataLoader data_loader,
@@ -1471,62 +1470,31 @@ auto auto_dynamic_assemble(
14711470 bool SVS_UNUSED (debug_load_from_static) = false,
14721471 svs::logging::logger_ptr logger = svs::logging::get()
14731472) {
1474- using Data = decltype (data_loader ());
1475- using Graph = decltype (graph_loader ());
1476-
1477- // The config loader reads the combined TOML (parameters + translation)
1473+ // Read the combined TOML (parameters + translation)
14781474 // and the translator binary data.
1479- auto config_loader = [&]() -> detail::VamanaStateLoader {
1480- auto table = lib::detail::read_metadata (deserializer, is);
1475+ auto table = lib::detail::read_metadata (is);
14811476
1482- auto parameters = lib::load<VamanaIndexParameters>(
1483- table.template cast <toml::table>().at (" parameters" ).template cast <toml::table>()
1484- );
1477+ auto parameters = lib::load<VamanaIndexParameters>(
1478+ table.template cast <toml::table>().at (" parameters" ).template cast <toml::table>()
1479+ );
14851480
1486- auto translation = table.template cast <toml::table>()
1487- .at (" translation" )
1488- .template cast <toml::table>();
1489-
1490- auto translator = IDTranslator::load (translation, deserializer, is);
1491-
1492- return detail::VamanaStateLoader{std::move (parameters), std::move (translator)};
1493- };
1494-
1495- std::optional<detail::VamanaStateLoader> config;
1496- std::optional<Data> data;
1497- std::optional<Graph> graph;
1498-
1499- if (deserializer.is_native ()) {
1500- // Order is always config->data->graph.
1501- config.emplace (config_loader ());
1502- data.emplace (data_loader ());
1503- graph.emplace (graph_loader ());
1504- } else {
1505- // Directory packing order is filesystem-dependent.
1506- // Read 3 data blocks: config, data and graph in a corresponding order.
1507- for (int data_block_idx = 0 ; data_block_idx < 3 ; ++data_block_idx) {
1508- auto name = deserializer.read_name_in_advance (is);
1509- if (name.starts_with (" config/" )) {
1510- config.emplace (config_loader ());
1511- } else if (name.starts_with (" data/" )) {
1512- data.emplace (data_loader ());
1513- } else if (name.starts_with (" graph/" )) {
1514- graph.emplace (graph_loader ());
1515- } else {
1516- throw ANNEXCEPTION (" The stream is corrupted!" );
1517- }
1518- }
1519- }
1481+ auto translation =
1482+ table.template cast <toml::table>().at (" translation" ).template cast <toml::table>();
1483+
1484+ auto translator = IDTranslator::load (translation, is);
1485+
1486+ auto data = data_loader ();
1487+ auto graph = graph_loader ();
15201488
1521- auto datasize = data-> size ();
1522- auto graphsize = graph-> n_nodes ();
1489+ auto datasize = data. size ();
1490+ auto graphsize = graph. n_nodes ();
15231491 if (datasize != graphsize) {
15241492 throw ANNEXCEPTION (
15251493 " Reloaded data has {} nodes while the graph has {} nodes!" , datasize, graphsize
15261494 );
15271495 }
15281496
1529- auto translator_size = config-> translator_ .size ();
1497+ auto translator_size = translator .size ();
15301498 if (translator_size != datasize) {
15311499 throw ANNEXCEPTION (
15321500 " Translator has {} IDs but should have {}" , translator_size, datasize
@@ -1535,11 +1503,11 @@ auto auto_dynamic_assemble(
15351503
15361504 auto threadpool = threads::as_threadpool (std::move (threadpool_proto));
15371505 return MutableVamanaIndex{
1538- config-> parameters_ ,
1539- std::move (* data),
1540- std::move (* graph),
1506+ parameters ,
1507+ std::move (data),
1508+ std::move (graph),
15411509 std::move (distance),
1542- std::move (config-> translator_ ),
1510+ std::move (translator ),
15431511 std::move (threadpool),
15441512 std::move (logger)};
15451513}
0 commit comments