Vanetza
 
Loading...
Searching...
No Matches
chunk_packet.cpp
1#include "chunk_packet.hpp"
2#include "cohesive_packet.hpp"
3#include <cassert>
4
5namespace vanetza
6{
7
8static const ByteBufferConvertible empty_byte_buffer_convertible;
9
10ChunkPacket::ChunkPacket()
11{
12}
13
14ChunkPacket::ChunkPacket(const ChunkPacket& other)
15{
16 for (auto& layer : other.m_layers) {
17 m_layers.insert(layer);
18 }
19}
20
21ChunkPacket& ChunkPacket::operator=(const ChunkPacket& other)
22{
23 ChunkPacket tmp = other;
24 m_layers.swap(tmp.m_layers);
25 return *this;
26}
27
29{
30 return m_layers[layer];
31}
32
33const ByteBufferConvertible& ChunkPacket::layer(OsiLayer layer) const
34{
35 auto found = m_layers.find(layer);
36 if (found != m_layers.end()) {
37 assert(found->first == layer);
38 return found->second;
39 } else {
40 return empty_byte_buffer_convertible;
41 }
42}
43
44std::size_t ChunkPacket::size() const
45{
46 std::size_t size = 0;
47 for(auto& it : m_layers)
48 {
49 size += it.second.size();
50 }
51
52 return size;
53}
54
55std::size_t ChunkPacket::size(OsiLayer from, OsiLayer to) const
56{
57 assert(from <= to);
58 std::size_t size = 0;
59 for (auto& layer : m_layers) {
60 if (layer.first >= from && layer.first <= to) {
61 size += layer.second.size();
62 }
63 }
64 return size;
65}
66
67ChunkPacket ChunkPacket::extract(OsiLayer from, OsiLayer to)
68{
69 ChunkPacket result;
70 for (auto layer : osi_layer_range(from, to)) {
71 using namespace std;
72 swap(result[layer], (*this)[layer]);
73 }
74 return result;
75}
76
77ChunkPacket& ChunkPacket::merge(ChunkPacket& source, OsiLayer from, OsiLayer to)
78{
79 for (auto layer : osi_layer_range(from, to)) {
80 (*this)[layer] = std::move(source[layer]);
81 source[layer] = empty_byte_buffer_convertible;
82 }
83 return *this;
84}
85
86} // namespace vanetza
87
ChunckPacket is a packet consisting of several memory chunks.
ChunkPacket & merge(ChunkPacket &packet, OsiLayer from, OsiLayer to)
std::size_t size() const
ByteBufferConvertible & layer(OsiLayer ol)
std::size_t size(OsiLayer from, OsiLayer to) const
ChunkPacket extract(OsiLayer from, OsiLayer to)
STL namespace.