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)#ifndef DBUS_OBJECT_PATH_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DBUS_OBJECT_PATH_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <iosfwd> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/dbus_export.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dbus { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ObjectPath is a type used to distinguish D-Bus object paths from simple 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// strings, especially since normal practice is that these should be only 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// initialized from static constants or obtained from remote objects and no 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// assumptions about their value made. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CHROME_DBUS_EXPORT ObjectPath { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Permit initialization without a value for passing to 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // dbus::MessageReader::PopObjectPath to fill in and from std::string 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // objects. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The compiler synthesised copy constructor and assignment operator are 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sufficient for our needs, as is implicit initialization of a std::string 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // from a string constant. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObjectPath() {} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit ObjectPath(const std::string& value) : value_(value) {} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves value as a std::string. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value() const { return value_; } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the value is a valid object path. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsValid() const; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Permit sufficient comparison to allow an ObjectPath to be used as a 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // key in a std::map. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator<(const ObjectPath&) const; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Permit testing for equality, required for mocks to work and useful for 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // observers. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator==(const ObjectPath&) const; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator!=(const ObjectPath&) const; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string value_; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This is required by gtest to print a readable output on test failures. 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)CHROME_DBUS_EXPORT void PrintTo(const ObjectPath& path, std::ostream* out); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace dbus 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // DBUS_OBJECT_PATH_H_ 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)