diff options
author | keybuk@google.com <keybuk@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-14 21:29:06 +0000 |
---|---|---|
committer | keybuk@google.com <keybuk@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-14 21:29:06 +0000 |
commit | 216ed0bef820f496f853510c6fb274a817257ea6 (patch) | |
tree | 04f3091bce4100749e7d167d033a69a61b9a6a90 /dbus/object_path.h | |
parent | d8f0b2d5f854cde9556fb4a9bc1a61e636aeba8e (diff) | |
download | chromium_src-216ed0bef820f496f853510c6fb274a817257ea6.zip chromium_src-216ed0bef820f496f853510c6fb274a817257ea6.tar.gz chromium_src-216ed0bef820f496f853510c6fb274a817257ea6.tar.bz2 |
dbus: add ObjectPath type
Rather than use std::string for object paths, add a dbus::ObjectPath type
that wraps one while allowing more type-safety. This solves all sorts of
issues with confusing object paths for strings, and allows us to do
Properties code using templates disambiguating them from strings.
BUG=chromium:109194
TEST=built and run tests
Change-Id: Icaf6f19daea4af23a9d2ec0ed76d2cbd379d680e
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=121920
Review URL: https://chromiumcodereview.appspot.com/9378039
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121941 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'dbus/object_path.h')
-rw-r--r-- | dbus/object_path.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/dbus/object_path.h b/dbus/object_path.h new file mode 100644 index 0000000..59071da --- /dev/null +++ b/dbus/object_path.h @@ -0,0 +1,46 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef DBUS_OBJECT_PATH_H_ +#define DBUS_OBJECT_PATH_H_ +#pragma once + +#include <string> + +namespace dbus { + +// ObjectPath is a type used to distinguish D-Bus object paths from simple +// strings, especially since normal practice is that these should be only +// initialized from static constants or obtained from remote objects and no +// assumptions about their value made. +class ObjectPath { + public: + // Permit initialization without a value for passing to + // dbus::MessageReader::PopObjectPath to fill in and from std::string + // objects. + // + // The compiler synthesised copy constructor and assignment operator are + // sufficient for our needs, as is implicit initialization of a std::string + // from a string constant. + ObjectPath() {} + explicit ObjectPath(const std::string& value) : value_(value) {} + + // Retrieves value as a std::string. + const std::string& value() const { return value_; } + + // Permit sufficient comparison to allow an ObjectPath to be used as a + // key in a std::map. + bool operator<(const ObjectPath&) const; + + // Permit testing for equality, required for mocks to work and useful for + // observers. + bool operator==(const ObjectPath&) const; + bool operator!=(const ObjectPath&) const; + private: + std::string value_; +}; + +} // namespace dbus + +#endif // DBUS_OBJECT_PATH_H_ |