Vanetza
Loading...
Searching...
No Matches
boost_geometry.cpp
1#include <vanetza/asn1/security_profile.hpp>
2#include VANETZA_ASN1_SECURITY_HEADER(PolygonalRegion.h)
3#include VANETZA_ASN1_SECURITY_HEADER(TwoDLocation.h)
4#include <vanetza/common/position_fix.hpp>
5#include <vanetza/security/v3/boost_geometry.hpp>
6
7namespace vanetza
8{
9namespace security
10{
11namespace v3
12{
13
14TwoDLocationModel make_model(const asn1::TwoDLocation& location)
15{
16 return TwoDLocationModel(location.longitude * 1e-7, location.latitude * 1e-7);
17}
18
19TwoDLocationModel make_model(const PositionFix& fix)
20{
21 return TwoDLocationModel(fix.longitude / units::degree, fix.latitude / units::degree);
22}
23
24
25TwoDLocationIterator::TwoDLocationIterator(const asn1::PolygonalRegion& region, std::size_t index) :
26 m_region(&region), m_index(index)
27{
28}
29
30void TwoDLocationIterator::increment()
31{
32 ++m_index;
33}
34
35void TwoDLocationIterator::decrement()
36{
37 --m_index;
38}
39
40void TwoDLocationIterator::advance(std::size_t n)
41{
42 m_index += n;
43}
44
45std::ptrdiff_t TwoDLocationIterator::distance_to(const TwoDLocationIterator& other) const
46{
47 return other.m_index - m_index;
48}
49
50bool TwoDLocationIterator::equal(const TwoDLocationIterator& other) const
51{
52 return m_region == other.m_region && m_index == other.m_index;
53}
54
55TwoDLocationModel TwoDLocationIterator::dereference() const
56{
57 assert(m_region != nullptr);
58 assert(m_region->list.array != nullptr);
59 assert(m_region->list.count > static_cast<decltype(m_region->list.count)>(m_index));
60 return make_model(*m_region->list.array[m_index]);
61}
62
63
64PolygonalRegionRingAdapter::PolygonalRegionRingAdapter(const asn1::PolygonalRegion& region) :
65 m_region(region)
66{
67 assert(m_region.list.array != nullptr);
68}
69
71{
72 return TwoDLocationIterator(m_region, 0);
73}
74
76{
77 return TwoDLocationIterator(m_region, m_region.list.count);
78}
79
80std::size_t PolygonalRegionRingAdapter::size() const
81{
82 return m_region.list.count;
83}
84
85} // namespace v3
86} // namespace security
87} // namespace vanetza
Adapt ASN.1 PolygonalRegion to a Boost.Geometry ring.