MCPcopy Create free account
hub / github.com/COVESA/vsomeip / deserialize

Method deserialize

implementation/protocol/src/subscribe_command.cpp:67–122  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

65}
66
67void subscribe_command::deserialize(const std::vector<byte_t>& _buffer, error_e& _error) {
68
69 size_t its_size(COMMAND_HEADER_SIZE + sizeof(service_) + sizeof(instance_) + sizeof(eventgroup_) + sizeof(major_) + sizeof(event_)
70 + sizeof(pending_id_));
71
72 if (its_size > _buffer.size()) {
73
74 _error = error_e::ERROR_NOT_ENOUGH_BYTES;
75 return;
76 }
77
78 // deserialize header
79 command::deserialize(_buffer, _error);
80 if (_error != error_e::ERROR_OK)
81 return;
82
83 // deserialize subscription
84 subscribe_command_base::deserialize(_buffer, _error);
85 if (_error != error_e::ERROR_OK)
86 return;
87
88 // deserialize filter
89 size_t its_offset(its_size);
90 if (_buffer.size() - its_offset >= sizeof(bool) + sizeof(bool) + sizeof(int64_t)) {
91
92 filter_ = std::make_shared<debounce_filter_impl_t>();
93 std::memcpy(&filter_->on_change_, &_buffer[its_offset], sizeof(filter_->on_change_));
94 its_offset += sizeof(filter_->on_change_);
95 std::memcpy(&filter_->on_change_resets_interval_, &_buffer[its_offset], sizeof(filter_->on_change_resets_interval_));
96 its_offset += sizeof(filter_->on_change_resets_interval_);
97 std::memcpy(&filter_->interval_, &_buffer[its_offset], sizeof(filter_->interval_));
98 its_offset += sizeof(filter_->interval_);
99
100 while (_buffer.size() - its_offset >= sizeof(size_t) + sizeof(byte_t)) {
101
102 size_t its_key;
103 byte_t its_value;
104
105 std::memcpy(&its_key, &_buffer[its_offset], sizeof(its_key));
106 if (filter_->ignore_.contains(its_key)) {
107
108 _error = error_e::ERROR_MALFORMED;
109 return;
110 }
111
112 its_offset += sizeof(its_key);
113 its_value = _buffer[its_offset];
114 its_offset += sizeof(its_value);
115
116 filter_->ignore_.emplace(std::make_pair(its_key, its_value));
117 }
118
119 std::memcpy(&filter_->send_current_value_after_, &_buffer[its_offset], sizeof(filter_->send_current_value_after_));
120 its_offset += sizeof(filter_->send_current_value_after_);
121 }
122}
123
124} // namespace protocol

Callers

nothing calls this directly

Calls 3

deserializeFunction · 0.85
sizeMethod · 0.45
containsMethod · 0.45

Tested by

no test coverage detected