summaryrefslogtreecommitdiff
path: root/implementation/protocol/src/register_event.cpp
blob: 5be91b6a7da8f96b192ab709df8b48b232d3da62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "../include/register_event.hpp"
#include <vsomeip/internal/logger.hpp>

namespace vsomeip_v3 {
namespace protocol {

register_event::register_event(service_t service, instance_t instance,
                    event_t event, event_type_e event_type,
                    bool is_provided, reliability_type_e reliability,
                    bool is_cyclic, uint16_t num_eventg,
                    const std::set<eventgroup_t> &eventgroups):
            service_(service), instance_(instance), event_(event),
            event_type_(event_type), is_provided_(is_provided),
            reliability_(reliability), is_cyclic_(is_cyclic),
            num_eventg_(num_eventg), eventgroups_(eventgroups) {
}

void
register_event::serialize(std::vector<byte_t> &_buffer, size_t &_offset) const {

    std::memcpy(&_buffer[_offset], &service_, sizeof(service_));
    _offset += sizeof(service_);
    std::memcpy(&_buffer[_offset], &instance_, sizeof(instance_));
    _offset += sizeof(instance_);
    std::memcpy(&_buffer[_offset], &event_, sizeof(event_));
    _offset += sizeof(event_);
    _buffer[_offset] = static_cast<byte_t>(event_type_);
    _offset += sizeof(event_type_);
    _buffer[_offset] = static_cast<byte_t>(is_provided_);
    _offset += sizeof(is_provided_);
    _buffer[_offset] = static_cast<byte_t>(reliability_);
    _offset += sizeof(reliability_);
    _buffer[_offset] = static_cast<byte_t>(is_cyclic_);
    _offset += sizeof(is_cyclic_);
    std::memcpy(&_buffer[_offset], &num_eventg_, sizeof(num_eventg_));
    _offset += sizeof(num_eventg_);

    for (const auto g : eventgroups_) {
        std::memcpy(&_buffer[_offset], &g, sizeof(g));
        _offset += sizeof(g);
    }
}

void
register_event::deserialize(const std::vector<byte_t> &_buffer, size_t &_offset) {

    std::memcpy(&service_, &_buffer[_offset], sizeof(service_));
    _offset += sizeof(service_);
    std::memcpy(&instance_, &_buffer[_offset], sizeof(instance_));
    _offset += sizeof(instance_);
    std::memcpy(&event_, &_buffer[_offset], sizeof(event_));
    _offset += sizeof(event_);
    event_type_ = static_cast<event_type_e>(_buffer[_offset]);
    _offset += sizeof(event_type_);
    is_provided_ = static_cast<bool>(_buffer[_offset]);
    _offset += sizeof(is_provided_);
    reliability_ = static_cast<reliability_type_e>(_buffer[_offset]);
    _offset += sizeof(reliability_);
    is_cyclic_ = static_cast<bool>(_buffer[_offset]);
    _offset += sizeof(is_cyclic_);
    std::memcpy(&num_eventg_, &_buffer[_offset], sizeof(num_eventg_));
    _offset += sizeof(num_eventg_);

    eventgroups_.clear();
    for (size_t i = 0; i < num_eventg_; i++) {
        eventgroup_t its_g;
        std::memcpy(&its_g, &_buffer[_offset], sizeof(its_g));
        _offset += sizeof(its_g);

        eventgroups_.insert(its_g);
    }
}

void
register_event::set_eventgroups(const std::set<eventgroup_t> &_eventgroups) {

    eventgroups_ = _eventgroups;
    num_eventg_ = (uint16_t)eventgroups_.size();
}

} // namespace protocol
} // namespace vsomeip_v3