15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/property.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/message.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/object_path.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/object_proxy.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dbus { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PropertyBase implementation. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertyBase::Init(PropertySet* property_set, const std::string& name) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!property_set_); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) property_set_ = property_set; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name_ = name; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PropertySet implementation. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PropertySet::PropertySet( 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObjectProxy* object_proxy, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& interface, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PropertyChangedCallback& property_changed_callback) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : object_proxy_(object_proxy), 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interface_(interface), 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) property_changed_callback_(property_changed_callback), 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_ptr_factory_(this) {} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PropertySet::~PropertySet() { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertySet::RegisterProperty(const std::string& name, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PropertyBase* property) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) property->Init(this, name); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) properties_map_[name] = property; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertySet::ConnectSignals() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(object_proxy_); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) object_proxy_->ConnectToSignal( 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPropertiesInterface, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPropertiesChanged, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PropertySet::ChangedReceived, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr()), 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PropertySet::ChangedConnected, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertySet::ChangedReceived(Signal* signal) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(signal); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageReader reader(signal); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string interface; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!reader.PopString(&interface)) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(WARNING) << "Property changed signal has wrong parameters: " 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "expected interface name: " << signal->ToString(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (interface != this->interface()) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!UpdatePropertiesFromReader(&reader)) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(WARNING) << "Property changed signal has wrong parameters: " 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "expected dictionary: " << signal->ToString(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(keybuk): dbus properties api has invalidated properties array 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on the end, we don't handle this right now because I don't know of 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // any service that sends it - or what they expect us to do with it. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add later when we need it. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertySet::ChangedConnected(const std::string& interface_name, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& signal_name, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG_IF(WARNING, !success) << "Failed to connect to " << signal_name 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "signal."; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertySet::Get(PropertyBase* property, GetCallback callback) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MethodCall method_call(kPropertiesInterface, kPropertiesGet); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageWriter writer(&method_call); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendString(interface()); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendString(property->name()); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(object_proxy_); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) object_proxy_->CallMethod(&method_call, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObjectProxy::TIMEOUT_USE_DEFAULT, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PropertySet::OnGet, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWeakPtr(), 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) property, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback)); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertySet::OnGet(PropertyBase* property, GetCallback callback, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Response* response) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!response) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(WARNING) << property->name() << ": Get: failed."; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageReader reader(response); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (property->PopValueFromReader(&reader)) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyPropertyChanged(property->name()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!callback.is_null()) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(response); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertySet::GetAll() { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MethodCall method_call(kPropertiesInterface, kPropertiesGetAll); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageWriter writer(&method_call); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendString(interface()); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(object_proxy_); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) object_proxy_->CallMethod(&method_call, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObjectProxy::TIMEOUT_USE_DEFAULT, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PropertySet::OnGetAll, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertySet::OnGetAll(Response* response) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!response) { 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LOG(WARNING) << "GetAll request failed for: " << interface_; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageReader reader(response); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!UpdatePropertiesFromReader(&reader)) { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(WARNING) << "GetAll response has wrong parameters: " 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "expected dictionary: " << response->ToString(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertySet::Set(PropertyBase* property, SetCallback callback) { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MethodCall method_call(kPropertiesInterface, kPropertiesSet); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageWriter writer(&method_call); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendString(interface()); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendString(property->name()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) property->AppendSetValueToWriter(&writer); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(object_proxy_); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) object_proxy_->CallMethod(&method_call, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObjectProxy::TIMEOUT_USE_DEFAULT, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PropertySet::OnSet, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWeakPtr(), 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) property, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback)); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PropertySet::OnSet(PropertyBase* property, 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetCallback callback, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Response* response) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG_IF(WARNING, !response) << property->name() << ": Set: failed."; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!callback.is_null()) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(response); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PropertySet::UpdatePropertiesFromReader(MessageReader* reader) { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(reader); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageReader array_reader(NULL); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!reader->PopArray(&array_reader)) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (array_reader.HasMoreData()) { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageReader dict_entry_reader(NULL); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (array_reader.PopDictEntry(&dict_entry_reader)) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdatePropertyFromReader(&dict_entry_reader); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PropertySet::UpdatePropertyFromReader(MessageReader* reader) { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(reader); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string name; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!reader->PopString(&name)) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PropertiesMap::iterator it = properties_map_.find(name); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (it == properties_map_.end()) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PropertyBase* property = it->second; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (property->PopValueFromReader(reader)) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyPropertyChanged(name); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PropertySet::NotifyPropertyChanged(const std::string& name) { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!property_changed_callback_.is_null()) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) property_changed_callback_.Run(name); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<Byte> specialization. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Property<uint8>::Property() : value_(0) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<uint8>::PopValueFromReader(MessageReader* reader) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfByte(&value_); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<uint8>::AppendSetValueToWriter(MessageWriter* writer) { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfByte(set_value_); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<bool> specialization. 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Property<bool>::Property() : value_(false) { 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<bool>::PopValueFromReader(MessageReader* reader) { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfBool(&value_); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<bool>::AppendSetValueToWriter(MessageWriter* writer) { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfBool(set_value_); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<int16> specialization. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Property<int16>::Property() : value_(0) { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<int16>::PopValueFromReader(MessageReader* reader) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfInt16(&value_); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<int16>::AppendSetValueToWriter(MessageWriter* writer) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfInt16(set_value_); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<uint16> specialization. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Property<uint16>::Property() : value_(0) { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<uint16>::PopValueFromReader(MessageReader* reader) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfUint16(&value_); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<uint16>::AppendSetValueToWriter(MessageWriter* writer) { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfUint16(set_value_); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<int32> specialization. 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Property<int32>::Property() : value_(0) { 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<int32>::PopValueFromReader(MessageReader* reader) { 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfInt32(&value_); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<int32>::AppendSetValueToWriter(MessageWriter* writer) { 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfInt32(set_value_); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<uint32> specialization. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Property<uint32>::Property() : value_(0) { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<uint32>::PopValueFromReader(MessageReader* reader) { 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfUint32(&value_); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<uint32>::AppendSetValueToWriter(MessageWriter* writer) { 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfUint32(set_value_); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<int64> specialization. 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Property<int64>::Property() : value_(0), set_value_(0) { 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<int64>::PopValueFromReader(MessageReader* reader) { 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfInt64(&value_); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<int64>::AppendSetValueToWriter(MessageWriter* writer) { 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfInt64(set_value_); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<uint64> specialization. 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Property<uint64>::Property() : value_(0) { 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<uint64>::PopValueFromReader(MessageReader* reader) { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfUint64(&value_); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<uint64>::AppendSetValueToWriter(MessageWriter* writer) { 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfUint64(set_value_); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<double> specialization. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Property<double>::Property() : value_(0.0) { 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<double>::PopValueFromReader(MessageReader* reader) { 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfDouble(&value_); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<double>::AppendSetValueToWriter(MessageWriter* writer) { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfDouble(set_value_); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<std::string> specialization. 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<std::string>::PopValueFromReader(MessageReader* reader) { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfString(&value_); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<std::string>::AppendSetValueToWriter(MessageWriter* writer) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfString(set_value_); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<ObjectPath> specialization. 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<ObjectPath>::PopValueFromReader(MessageReader* reader) { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reader->PopVariantOfObjectPath(&value_); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<ObjectPath>::AppendSetValueToWriter(MessageWriter* writer) { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->AppendVariantOfObjectPath(set_value_); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<std::vector<std::string> > specialization. 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<std::vector<std::string> >::PopValueFromReader( 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageReader* reader) { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageReader variant_reader(NULL); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!reader->PopVariant(&variant_reader)) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value_.clear(); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return variant_reader.PopArrayOfStrings(&value_); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<std::vector<std::string> >::AppendSetValueToWriter( 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageWriter* writer) { 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageWriter variant_writer(NULL); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->OpenVariant("as", &variant_writer); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) variant_writer.AppendArrayOfStrings(set_value_); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->CloseContainer(&variant_writer); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Property<std::vector<ObjectPath> > specialization. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Property<std::vector<ObjectPath> >::PopValueFromReader( 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageReader* reader) { 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageReader variant_reader(NULL); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!reader->PopVariant(&variant_reader)) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value_.clear(); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return variant_reader.PopArrayOfObjectPaths(&value_); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Property<std::vector<ObjectPath> >::AppendSetValueToWriter( 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageWriter* writer) { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageWriter variant_writer(NULL); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->OpenVariant("ao", &variant_writer); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) variant_writer.AppendArrayOfObjectPaths(set_value_); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer->CloseContainer(&variant_writer); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 453a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// 454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Property<std::vector<uint8> > specialization. 455a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// 456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)template <> 458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool Property<std::vector<uint8> >::PopValueFromReader(MessageReader* reader) { 459a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MessageReader variant_reader(NULL); 460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!reader->PopVariant(&variant_reader)) 461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return false; 462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value_.clear(); 464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const uint8* bytes = NULL; 465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) size_t length = 0; 466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!variant_reader.PopArrayOfBytes(&bytes, &length)) 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return false; 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value_.assign(bytes, bytes + length); 469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return true; 470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)template <> 473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void Property<std::vector<uint8> >::AppendSetValueToWriter( 474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MessageWriter* writer) { 475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MessageWriter variant_writer(NULL); 476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) writer->OpenVariant("ay", &variant_writer); 477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) variant_writer.AppendArrayOfBytes(set_value_.data(), set_value_.size()); 478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) writer->CloseContainer(&variant_writer); 479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<uint8>; 4825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<bool>; 4835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<int16>; 4845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<uint16>; 4855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<int32>; 4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<uint32>; 4875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<int64>; 4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<uint64>; 4895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<double>; 4905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<std::string>; 4915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<ObjectPath>; 4925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<std::vector<std::string> >; 4935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<std::vector<ObjectPath> >; 4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template class Property<std::vector<uint8> >; 4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace dbus 497