Index: dbus/property.cc |
diff --git a/dbus/property.cc b/dbus/property.cc |
index 0ac65ef6991641d523fdd7f8b43ca045b44844e5..0351c4a59ac2ae79d747853a241483bf6d74745d 100644 |
--- a/dbus/property.cc |
+++ b/dbus/property.cc |
@@ -662,7 +662,7 @@ void Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>:: |
} |
// |
-// Property<std::map<std::string, std::vector<uint8_t>>> |
+// Property<std::unordered_map<std::string, std::vector<uint8_t>>> |
// specialization. |
// |
@@ -725,6 +725,70 @@ void Property<std::unordered_map<std::string, std::vector<uint8_t>>>:: |
writer->CloseContainer(&variant_writer); |
} |
+// |
+// Property<std::unordered_map<uint16_t, std::vector<uint8_t>>> |
+// specialization. |
+// |
+ |
+template <> |
+bool Property<std::unordered_map<uint16_t, std::vector<uint8_t>>>:: |
+ PopValueFromReader(MessageReader* reader) { |
+ MessageReader variant_reader(nullptr); |
+ MessageReader dict_reader(nullptr); |
+ if (!reader->PopVariant(&variant_reader) || |
+ !variant_reader.PopArray(&dict_reader)) |
+ return false; |
+ |
+ value_.clear(); |
+ while (dict_reader.HasMoreData()) { |
+ MessageReader entry_reader(nullptr); |
+ if (!dict_reader.PopDictEntry(&entry_reader)) |
+ return false; |
+ |
+ uint16_t key; |
+ MessageReader value_varient_reader(nullptr); |
+ if (!entry_reader.PopUint16(&key) || |
+ !entry_reader.PopVariant(&value_varient_reader)) |
+ return false; |
+ |
+ const uint8_t* bytes = nullptr; |
+ size_t length = 0; |
+ if (!value_varient_reader.PopArrayOfBytes(&bytes, &length)) |
+ return false; |
+ |
+ value_[key].assign(bytes, bytes + length); |
+ } |
+ return true; |
+} |
+ |
+template <> |
+void Property<std::unordered_map<uint16_t, std::vector<uint8_t>>>:: |
+ AppendSetValueToWriter(MessageWriter* writer) { |
+ MessageWriter variant_writer(nullptr); |
+ MessageWriter dict_writer(nullptr); |
+ |
+ writer->OpenVariant("a{qv}", &variant_writer); |
+ variant_writer.OpenArray("{qv}", &dict_writer); |
+ |
+ for (const auto& pair : set_value_) { |
+ MessageWriter entry_writer(nullptr); |
+ dict_writer.OpenDictEntry(&entry_writer); |
+ |
+ entry_writer.AppendUint16(pair.first); |
+ |
+ MessageWriter value_varient_writer(nullptr); |
+ entry_writer.OpenVariant("ay", &value_varient_writer); |
+ value_varient_writer.AppendArrayOfBytes(pair.second.data(), |
+ pair.second.size()); |
+ entry_writer.CloseContainer(&value_varient_writer); |
+ |
+ dict_writer.CloseContainer(&entry_writer); |
+ } |
+ |
+ variant_writer.CloseContainer(&dict_writer); |
+ writer->CloseContainer(&variant_writer); |
+} |
+ |
template class Property<uint8_t>; |
template class Property<bool>; |
template class Property<int16_t>; |
@@ -742,5 +806,6 @@ template class Property<std::vector<uint8_t>>; |
template class Property<std::map<std::string, std::string>>; |
template class Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>; |
template class Property<std::unordered_map<std::string, std::vector<uint8_t>>>; |
+template class Property<std::unordered_map<uint16_t, std::vector<uint8_t>>>; |
} // namespace dbus |