| 42 | } |
| 43 | |
| 44 | void multiple_services_command_base::deserialize(const std::vector<byte_t>& _buffer, error_e& _error) { |
| 45 | |
| 46 | if (COMMAND_HEADER_SIZE > _buffer.size()) { |
| 47 | |
| 48 | _error = error_e::ERROR_NOT_ENOUGH_BYTES; |
| 49 | return; |
| 50 | } |
| 51 | |
| 52 | // deserialize header |
| 53 | command::deserialize(_buffer, _error); |
| 54 | if (_error != error_e::ERROR_OK) |
| 55 | return; |
| 56 | |
| 57 | // deserialize payload |
| 58 | size_t its_offset(COMMAND_POSITION_PAYLOAD); |
| 59 | size_t its_count = (_buffer.size() - its_offset) |
| 60 | / (sizeof(service::service_) + sizeof(service::instance_) + sizeof(service::major_) + sizeof(service::minor_)); |
| 61 | |
| 62 | for (size_t i = 0; i < its_count; i++) { |
| 63 | service its_service; |
| 64 | |
| 65 | std::memcpy(&its_service.service_, &_buffer[its_offset], sizeof(its_service.service_)); |
| 66 | its_offset += sizeof(its_service.service_); |
| 67 | std::memcpy(&its_service.instance_, &_buffer[its_offset], sizeof(its_service.instance_)); |
| 68 | its_offset += sizeof(its_service.instance_); |
| 69 | std::memcpy(&its_service.major_, &_buffer[its_offset], sizeof(its_service.major_)); |
| 70 | its_offset += sizeof(its_service.major_); |
| 71 | std::memcpy(&its_service.minor_, &_buffer[its_offset], sizeof(its_service.minor_)); |
| 72 | its_offset += sizeof(its_service.minor_); |
| 73 | |
| 74 | services_.insert(its_service); |
| 75 | } |
| 76 | } |
| 77 | |
| 78 | std::set<service> multiple_services_command_base::get_services() const { |
| 79 |
nothing calls this directly
no test coverage detected