1#include <vanetza/asn1/security/PolygonalRegion.h>
2#include <vanetza/asn1/security/TwoDLocation.h>
3#include <vanetza/common/position_fix.hpp>
4#include <vanetza/security/v3/boost_geometry.hpp>
13TwoDLocationModel make_model(
const asn1::TwoDLocation& location)
15 return TwoDLocationModel(location.longitude * 1e-7, location.latitude * 1e-7);
18TwoDLocationModel make_model(
const PositionFix& fix)
20 return TwoDLocationModel(fix.longitude / units::degree, fix.latitude / units::degree);
24TwoDLocationIterator::TwoDLocationIterator(
const asn1::PolygonalRegion& region, std::size_t index) :
25 m_region(®ion), m_index(index)
29void TwoDLocationIterator::increment()
34void TwoDLocationIterator::decrement()
39void TwoDLocationIterator::advance(std::size_t n)
44std::ptrdiff_t TwoDLocationIterator::distance_to(
const TwoDLocationIterator& other)
const
46 return other.m_index - m_index;
49bool TwoDLocationIterator::equal(
const TwoDLocationIterator& other)
const
51 return m_region == other.m_region && m_index == other.m_index;
54TwoDLocationModel TwoDLocationIterator::dereference()
const
56 assert(m_region !=
nullptr);
57 assert(m_region->list.array !=
nullptr);
58 assert(m_region->list.count > m_index);
59 return make_model(*m_region->list.array[m_index]);
63PolygonalRegionRingAdapter::PolygonalRegionRingAdapter(
const asn1::PolygonalRegion& region) :
66 assert(m_region.list.array !=
nullptr);
69PolygonalRegionRingAdapter::iterator PolygonalRegionRingAdapter::begin()
const
71 return TwoDLocationIterator(m_region, 0);
74PolygonalRegionRingAdapter::iterator PolygonalRegionRingAdapter::end()
const
76 return TwoDLocationIterator(m_region, m_region.list.count);
79std::size_t PolygonalRegionRingAdapter::size()
const
81 return m_region.list.count;