| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/developer/debug/ipc/protocol_helpers.h" |
| |
| namespace debug_ipc { |
| |
| void Serialize(const std::string& s, MessageWriter* writer) { writer->WriteString(s); } |
| |
| bool Deserialize(MessageReader* reader, std::string* s) { return reader->ReadString(s); } |
| |
| void Serialize(uint64_t data, MessageWriter* writer) { writer->WriteUint64(data); } |
| |
| bool Deserialize(MessageReader* reader, uint64_t* data) { return reader->ReadUint64(data); } |
| |
| void Serialize(int32_t data, MessageWriter* writer) { writer->WriteInt32(data); } |
| |
| bool Deserialize(MessageReader* reader, int32_t* data) { return reader->ReadInt32(data); } |
| |
| void Serialize(const Register& reg, MessageWriter* writer) { |
| writer->WriteUint32(*reinterpret_cast<const uint32_t*>(®.id)); |
| writer->WriteUint32(reg.data.size()); |
| writer->WriteBytes(®.data[0], reg.data.size()); |
| } |
| |
| bool Deserialize(MessageReader* reader, Register* reg) { |
| if (!reader->ReadUint32(reinterpret_cast<uint32_t*>(®->id))) |
| return false; |
| uint32_t length; |
| if (!reader->ReadUint32(&length)) |
| return false; |
| reg->data.resize(length); |
| return reader->ReadBytes(length, ®->data[0]); |
| } |
| |
| void Serialize(RegisterCategory type, MessageWriter* writer) { |
| writer->WriteUint32(static_cast<uint32_t>(type)); |
| } |
| |
| bool Deserialize(MessageReader* reader, RegisterCategory* type) { |
| return reader->ReadUint32(reinterpret_cast<uint32_t*>(type)); |
| } |
| |
| void Serialize(const AddressRange& range, MessageWriter* writer) { |
| writer->WriteUint64(range.begin()); |
| writer->WriteUint64(range.end()); |
| } |
| |
| bool Deserialize(MessageReader* reader, AddressRange* range) { |
| uint64_t begin, end; |
| if (!reader->ReadUint64(&begin) || !reader->ReadUint64(&end) || end < begin) |
| return false; |
| |
| *range = AddressRange(begin, end); |
| return true; |
| } |
| |
| } // namespace debug_ipc |