Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(792)

Side by Side Diff: dbus/property.cc

Issue 893663002: Enhance the DBus interface for peerd (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix minor nits Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « dbus/property.h ('k') | dbus/property_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "dbus/property.h" 5 #include "dbus/property.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 10
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 471
472 template <> 472 template <>
473 void Property<std::vector<uint8> >::AppendSetValueToWriter( 473 void Property<std::vector<uint8> >::AppendSetValueToWriter(
474 MessageWriter* writer) { 474 MessageWriter* writer) {
475 MessageWriter variant_writer(NULL); 475 MessageWriter variant_writer(NULL);
476 writer->OpenVariant("ay", &variant_writer); 476 writer->OpenVariant("ay", &variant_writer);
477 variant_writer.AppendArrayOfBytes(set_value_.data(), set_value_.size()); 477 variant_writer.AppendArrayOfBytes(set_value_.data(), set_value_.size());
478 writer->CloseContainer(&variant_writer); 478 writer->CloseContainer(&variant_writer);
479 } 479 }
480 480
481 //
482 // Property<std::map<std::string, std::string>> specialization.
483 //
484
485 template <>
486 bool Property<std::map<std::string, std::string>>::PopValueFromReader(
487 MessageReader* reader) {
488 MessageReader variant_reader(NULL);
489 MessageReader array_reader(NULL);
490 if (!reader->PopVariant(&variant_reader) ||
491 !variant_reader.PopArray(&array_reader))
492 return false;
493 value_.clear();
494 while (array_reader.HasMoreData()) {
495 dbus::MessageReader dict_entry_reader(NULL);
496 if (!array_reader.PopDictEntry(&dict_entry_reader))
497 return false;
498 std::string key;
499 std::string value;
500 if (!dict_entry_reader.PopString(&key) ||
501 !dict_entry_reader.PopString(&value))
502 return false;
503 value_[key] = value;
504 }
505 return true;
506 }
507
508 template <>
509 void Property<std::map<std::string, std::string>>::AppendSetValueToWriter(
510 MessageWriter* writer) {
511 MessageWriter variant_writer(NULL);
512 MessageWriter dict_writer(NULL);
513 writer->OpenVariant("a{ss}", &variant_writer);
514 variant_writer.OpenArray("{ss}", &dict_writer);
515 for (const auto& pair : set_value_) {
516 dbus::MessageWriter entry_writer(NULL);
517 dict_writer.OpenDictEntry(&entry_writer);
518 entry_writer.AppendString(pair.first);
519 entry_writer.AppendString(pair.second);
520 dict_writer.CloseContainer(&entry_writer);
521 }
522 variant_writer.CloseContainer(&dict_writer);
523 writer->CloseContainer(&variant_writer);
524 }
525
526 //
527 // Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>
528 // specialization.
529 //
530
531 template <>
532 bool Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>::
533 PopValueFromReader(MessageReader* reader) {
534 MessageReader variant_reader(NULL);
535 MessageReader array_reader(NULL);
536 if (!reader->PopVariant(&variant_reader) ||
537 !variant_reader.PopArray(&array_reader))
538 return false;
539
540 value_.clear();
541 while (array_reader.HasMoreData()) {
542 dbus::MessageReader struct_reader(NULL);
543 if (!array_reader.PopStruct(&struct_reader))
544 return false;
545
546 std::pair<std::vector<uint8_t>, uint16_t> entry;
547 const uint8* bytes = NULL;
548 size_t length = 0;
549 if (!struct_reader.PopArrayOfBytes(&bytes, &length))
550 return false;
551 entry.first.assign(bytes, bytes + length);
552 if (!struct_reader.PopUint16(&entry.second))
553 return false;
554 value_.push_back(entry);
555 }
556 return true;
557 }
558
559 template <>
560 void Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>::
561 AppendSetValueToWriter(MessageWriter* writer) {
562 MessageWriter variant_writer(NULL);
563 MessageWriter array_writer(NULL);
564 writer->OpenVariant("a(ayq)", &variant_writer);
565 variant_writer.OpenArray("(ayq)", &array_writer);
566 for (const auto& pair : set_value_) {
567 dbus::MessageWriter struct_writer(nullptr);
568 array_writer.OpenStruct(&struct_writer);
569 struct_writer.AppendArrayOfBytes(std::get<0>(pair).data(),
570 std::get<0>(pair).size());
571 struct_writer.AppendUint16(std::get<1>(pair));
572 array_writer.CloseContainer(&struct_writer);
573 }
574 variant_writer.CloseContainer(&array_writer);
575 writer->CloseContainer(&variant_writer);
576 }
577
481 template class Property<uint8>; 578 template class Property<uint8>;
482 template class Property<bool>; 579 template class Property<bool>;
483 template class Property<int16>; 580 template class Property<int16>;
484 template class Property<uint16>; 581 template class Property<uint16>;
485 template class Property<int32>; 582 template class Property<int32>;
486 template class Property<uint32>; 583 template class Property<uint32>;
487 template class Property<int64>; 584 template class Property<int64>;
488 template class Property<uint64>; 585 template class Property<uint64>;
489 template class Property<double>; 586 template class Property<double>;
490 template class Property<std::string>; 587 template class Property<std::string>;
491 template class Property<ObjectPath>; 588 template class Property<ObjectPath>;
492 template class Property<std::vector<std::string> >; 589 template class Property<std::vector<std::string> >;
493 template class Property<std::vector<ObjectPath> >; 590 template class Property<std::vector<ObjectPath> >;
494 template class Property<std::vector<uint8> >; 591 template class Property<std::vector<uint8> >;
592 template class Property<std::map<std::string, std::string>>;
593 template class Property<std::vector<std::pair<std::vector<uint8_t>, uint16_t>>>;
495 594
496 } // namespace dbus 595 } // namespace dbus
OLDNEW
« no previous file with comments | « dbus/property.h ('k') | dbus/property_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698