forked from organicmaps/organicmaps
[osrm][routing] Store number of nodes for matrix
This commit is contained in:
parent
e5f65a930e
commit
d903a7fa28
2 changed files with 19 additions and 14 deletions
|
@ -2,12 +2,13 @@
|
|||
|
||||
#include <iostream>
|
||||
|
||||
#include "../Server/DataStructures/InternalDataFacade.h"
|
||||
|
||||
#include "../../../../base/bits.hpp"
|
||||
#include "../../../../base/logging.hpp"
|
||||
|
||||
#include "../../../../coding/matrix_traversal.hpp"
|
||||
#include "../../../../coding/internal/file_data.hpp"
|
||||
#include "../../../../base/bits.hpp"
|
||||
#include "../../../../base/logging.hpp"
|
||||
|
||||
#include "../../../../routing/osrm_data_facade.hpp"
|
||||
|
||||
#include "../../../succinct/elias_fano.hpp"
|
||||
|
@ -16,6 +17,7 @@
|
|||
#include "../../../succinct/rs_bit_vector.hpp"
|
||||
#include "../../../succinct/mapper.hpp"
|
||||
|
||||
#include "../Server/DataStructures/InternalDataFacade.h"
|
||||
|
||||
namespace mapsme
|
||||
{
|
||||
|
@ -54,7 +56,7 @@ void Converter::run(const std::string & name)
|
|||
InternalDataFacade<QueryEdge::EdgeData> facade(server_paths);
|
||||
PrintStatus(true);
|
||||
|
||||
uint64_t const nodeCount = facade.GetNumberOfNodes();
|
||||
unsigned const nodeCount = facade.GetNumberOfNodes();
|
||||
|
||||
std::vector<uint64_t> edges;
|
||||
std::vector<uint32_t> edgesData;
|
||||
|
@ -183,8 +185,10 @@ void Converter::run(const std::string & name)
|
|||
succinct::elias_fano matrix(&builder);
|
||||
|
||||
std::string fileName = name + "." + ROUTING_MATRIX_FILE_TAG;
|
||||
succinct::mapper::freeze(matrix, fileName.c_str());
|
||||
|
||||
std::ofstream fout(fileName, std::ios::binary);
|
||||
fout.write((const char*)&nodeCount, sizeof(nodeCount));
|
||||
succinct::mapper::freeze(matrix, fout);
|
||||
fout.close();
|
||||
|
||||
std::cout << "--- Save edge data" << std::endl;
|
||||
succinct::elias_fano_compressed_list edgeVector(edgesData);
|
||||
|
@ -234,10 +238,10 @@ void Converter::run(const std::string & name)
|
|||
facadeNew.Load(container);
|
||||
|
||||
uint64_t edgesCount = facadeNew.GetNumberOfEdges() - copiedEdges + ignoredEdges;
|
||||
std::cout << "Check node count " << facade.GetNumberOfNodes() << " == " << facadeNew.GetNumberOfNodes() << "...";
|
||||
PrintStatus(facade.GetNumberOfNodes() == facadeNew.GetNumberOfNodes());
|
||||
std::cout << "Check edges count " << facade.GetNumberOfEdges() << " == " << edgesCount << "...";
|
||||
PrintStatus(facade.GetNumberOfEdges() == edgesCount);
|
||||
std::cout << "Check node count " << facade.GetNumberOfNodes() << " == " << facadeNew.GetNumberOfNodes() << "..." << std::endl;
|
||||
CHECK_EQUAL(facade.GetNumberOfNodes(), facadeNew.GetNumberOfNodes(), ());
|
||||
std::cout << "Check edges count " << facade.GetNumberOfEdges() << " == " << edgesCount << "..." << std::endl;
|
||||
CHECK_EQUAL(facade.GetNumberOfEdges(), edgesCount, ());
|
||||
|
||||
std::cout << "Check edges data ...";
|
||||
bool error = false;
|
||||
|
|
|
@ -65,9 +65,9 @@ public:
|
|||
|
||||
m_handleFanoMatrix.Assign(container.Map(ROUTING_MATRIX_FILE_TAG));
|
||||
ASSERT(m_handleFanoMatrix.IsValid(), ());
|
||||
succinct::mapper::map(m_matrix, m_handleFanoMatrix.GetData<char>());
|
||||
|
||||
m_numberOfNodes = (unsigned)sqrt(m_matrix.size() / 2) + 1;
|
||||
m_numberOfNodes = *m_handleFanoMatrix.GetData<unsigned>();
|
||||
succinct::mapper::map(m_matrix, m_handleFanoMatrix.GetData<char>() + sizeof(unsigned));
|
||||
}
|
||||
|
||||
void Clear()
|
||||
|
@ -135,13 +135,14 @@ public:
|
|||
|
||||
EdgeID BeginEdges(const NodeID n) const
|
||||
{
|
||||
return n == 0 ? 0 : m_matrix.rank(2 * n * (uint64_t)GetNumberOfNodes());
|
||||
uint64_t idx = 2 * n * (uint64_t)GetNumberOfNodes();
|
||||
return n == 0 ? 0 : m_matrix.rank(min(idx, m_matrix.size()));
|
||||
}
|
||||
|
||||
EdgeID EndEdges(const NodeID n) const
|
||||
{
|
||||
uint64_t const idx = 2 * (n + 1) * (uint64_t)GetNumberOfNodes();
|
||||
return m_matrix.rank(std::min(idx, m_matrix.size()));
|
||||
return m_matrix.rank(min(idx, m_matrix.size()));
|
||||
}
|
||||
|
||||
EdgeRange GetAdjacentEdgeRange(const NodeID node) const
|
||||
|
|
Loading…
Add table
Reference in a new issue