co-maps/libs/search/intersection_result.hpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

43 lines
1.3 KiB
C++
Raw Permalink Normal View History

2025-11-22 13:58:55 +01:00
#pragma once
#include "search/model.hpp"
#include <cstdint>
#include <limits>
#include <string>
namespace search
{
// This class holds higher-level features for an intersection result,
// i.e. BUILDING and STREET for POI or STREET for BUILDING.
struct IntersectionResult
{
static uint32_t constexpr kInvalidId = std::numeric_limits<uint32_t>::max();
void Set(Model::Type type, uint32_t id);
// Returns the first valid feature among the [SUBPOI, COMPLEX_POI, BUILDING, STREET].
uint32_t InnermostResult() const;
// Returns true when at least one valid feature exists.
inline bool IsValid() const { return InnermostResult() != kInvalidId; }
// Building == Streets means that we have actual street result, but got here
// via _fake_ TYPE_BUILDING layer (see MatchPOIsAndBuildings).
inline bool IsFakeBuildingButStreet() const { return m_building != kInvalidId && m_building == m_street; }
inline bool IsPoiAndComplexPoi() const { return m_complexPoi != kInvalidId && m_subpoi != kInvalidId; }
// Clears all fields to an invalid state.
void Clear();
uint32_t m_subpoi = kInvalidId;
uint32_t m_complexPoi = kInvalidId;
uint32_t m_building = kInvalidId;
uint32_t m_street = kInvalidId;
uint32_t m_suburb = kInvalidId;
};
std::string DebugPrint(IntersectionResult const & result);
} // namespace search