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