void DynamicDataLoader::load_deferred( deferred_json &data ) { while( !data.empty() ) { const size_t n = data.size(); auto it = data.begin(); for( size_t idx = 0; idx != n; ++idx ) { try { std::istringstream str( it->first ); JsonIn jsin( str ); JsonObject jo = jsin.get_object(); load_object( jo, it->second ); } catch( const std::exception &err ) { debugmsg( "Error loading data from json: %s", err.what() ); } ++it; } data.erase( data.begin(), it ); if( data.size() == n ) { std::ostringstream discarded; for( const auto &elem : data ) { discarded << elem.first; } debugmsg( "JSON contains circular dependency. Discarded %i objects:\n%s", data.size(), discarded.str().c_str() ); data.clear(); return; // made no progress on this cycle so abort } } }
bool DynamicDataLoader::load_deferred( deferred_json& data ) { while( !data.empty() ) { size_t n = static_cast<size_t>( data.size() ); auto it = data.begin(); for( size_t idx = 0; idx != n; ++idx ) { try { std::istringstream str( it->first ); JsonIn jsin( str ); JsonObject jo = jsin.get_object(); load_object( jo, it->second ); } catch( const std::exception &err ) { debugmsg( "Error loading data from json: %s", err.what() ); } ++it; } data.erase( data.begin(), it ); if( data.size() == n ) { return false; // made no progress on this cycle so abort } } return true; }