| 53 | } |
| 54 | |
| 55 | void register_event::deserialize(const std::vector<byte_t>& _buffer, size_t& _offset, error_e& _error) { |
| 56 | |
| 57 | size_t its_size(_offset + sizeof(service_) + sizeof(instance_) + sizeof(event_) + sizeof(event_type_) + sizeof(is_provided_) |
| 58 | + sizeof(reliability_) + sizeof(is_cyclic_) + sizeof(num_eventg_)); |
| 59 | |
| 60 | // First check: Does the buffer contain the full static part of the data? |
| 61 | if (_buffer.size() < its_size) { |
| 62 | _error = error_e::ERROR_NOT_ENOUGH_BYTES; |
| 63 | return; |
| 64 | } |
| 65 | |
| 66 | std::memcpy(&service_, &_buffer[_offset], sizeof(service_)); |
| 67 | _offset += sizeof(service_); |
| 68 | std::memcpy(&instance_, &_buffer[_offset], sizeof(instance_)); |
| 69 | _offset += sizeof(instance_); |
| 70 | std::memcpy(&event_, &_buffer[_offset], sizeof(event_)); |
| 71 | _offset += sizeof(event_); |
| 72 | event_type_ = static_cast<event_type_e>(_buffer[_offset]); |
| 73 | _offset += sizeof(event_type_); |
| 74 | is_provided_ = static_cast<bool>(_buffer[_offset]); |
| 75 | _offset += sizeof(is_provided_); |
| 76 | reliability_ = static_cast<reliability_type_e>(_buffer[_offset]); |
| 77 | _offset += sizeof(reliability_); |
| 78 | is_cyclic_ = static_cast<bool>(_buffer[_offset]); |
| 79 | _offset += sizeof(is_cyclic_); |
| 80 | std::memcpy(&num_eventg_, &_buffer[_offset], sizeof(num_eventg_)); |
| 81 | _offset += sizeof(num_eventg_); |
| 82 | |
| 83 | // Second check: Does the buffer contain the full dynamic part of the data? |
| 84 | if (_buffer.size() < _offset + (num_eventg_ * sizeof(eventgroup_t))) { |
| 85 | _error = error_e::ERROR_NOT_ENOUGH_BYTES; |
| 86 | return; |
| 87 | } |
| 88 | |
| 89 | eventgroups_.clear(); |
| 90 | for (size_t i = 0; i < num_eventg_; i++) { |
| 91 | eventgroup_t its_g; |
| 92 | std::memcpy(&its_g, &_buffer[_offset], sizeof(its_g)); |
| 93 | _offset += sizeof(its_g); |
| 94 | |
| 95 | eventgroups_.insert(its_g); |
| 96 | } |
| 97 | } |
| 98 | |
| 99 | void register_event::set_eventgroups(const std::set<eventgroup_t>& _eventgroups) { |
| 100 | |