Files
comaps/routing/segment.cpp
Konstantin Pastbin e3e4a1985a Organic Maps sources as of 02.04.2025 (fad26bbf22ac3da75e01e62aa01e5c8e11861005)
To expand with full Organic Maps and Maps.ME commits history run:
  git remote add om-historic [om-historic.git repo url]
  git fetch --tags om-historic
  git replace squashed-history historic-commits
2025-05-08 21:10:51 +07:00

94 lines
2.5 KiB
C++

#include "routing/segment.hpp"
#include "routing/fake_feature_ids.hpp"
#include "std/boost_container_hash.hpp" // needed despite of IDE warning
#include <sstream>
namespace routing
{
// Segment -----------------------------------------------------------------------------------------
uint32_t Segment::GetPointId(bool front) const
{
return m_forward == front ? m_segmentIdx + 1 : m_segmentIdx;
}
bool Segment::operator<(Segment const & seg) const
{
if (m_featureId != seg.m_featureId)
return m_featureId < seg.m_featureId;
if (m_segmentIdx != seg.m_segmentIdx)
return m_segmentIdx < seg.m_segmentIdx;
if (m_mwmId != seg.m_mwmId)
return m_mwmId < seg.m_mwmId;
return m_forward < seg.m_forward;
}
bool Segment::operator==(Segment const & seg) const
{
return m_featureId == seg.m_featureId && m_segmentIdx == seg.m_segmentIdx &&
m_mwmId == seg.m_mwmId && m_forward == seg.m_forward;
}
bool Segment::IsInverse(Segment const & seg) const
{
return m_featureId == seg.m_featureId && m_segmentIdx == seg.m_segmentIdx &&
m_mwmId == seg.m_mwmId && m_forward != seg.m_forward;
}
bool Segment::IsFakeCreated() const
{
return m_featureId == FakeFeatureIds::kIndexGraphStarterId;
}
bool Segment::IsRealSegment() const
{
return m_mwmId != kFakeNumMwmId && !FakeFeatureIds::IsTransitFeature(m_featureId);
}
// SegmentEdge -------------------------------------------------------------------------------------
bool SegmentEdge::operator==(SegmentEdge const & edge) const
{
return m_target == edge.m_target && m_weight == edge.m_weight;
}
bool SegmentEdge::operator<(SegmentEdge const & edge) const
{
if (m_target != edge.m_target)
return m_target < edge.m_target;
return m_weight < edge.m_weight;
}
std::string DebugPrint(Segment const & segment)
{
std::ostringstream out;
out << std::boolalpha << "Segment(" << segment.GetMwmId() << ", " << segment.GetFeatureId() << ", "
<< segment.GetSegmentIdx() << ", " << segment.IsForward() << ")";
return out.str();
}
std::string DebugPrint(SegmentEdge const & edge)
{
std::ostringstream out;
out << "Edge(" << DebugPrint(edge.GetTarget()) << ", " << edge.GetWeight() << ")";
return out.str();
}
} // namespace routing
namespace std
{
size_t std::hash<routing::Segment>::operator()(routing::Segment const & segment) const
{
size_t seed = 0;
boost::hash_combine(seed, segment.GetFeatureId());
boost::hash_combine(seed, segment.GetSegmentIdx());
boost::hash_combine(seed, segment.GetMwmId());
boost::hash_combine(seed, segment.IsForward());
return seed;
}
} // namespace std