summaryrefslogtreecommitdiffstats
path: root/src/engine/GraphObjectImpl.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-02-02 20:37:50 +0000
committerDavid Robillard <d@drobilla.net>2010-02-02 20:37:50 +0000
commita645d2b8be4d7d31f6eef1649156b166a01e0c31 (patch)
tree3d83c08e9a5460cc6582482bcfc673dff956a1e7 /src/engine/GraphObjectImpl.hpp
parent653679e967f11a0e008521885fcaf6994d2961fa (diff)
downloadingen-a645d2b8be4d7d31f6eef1649156b166a01e0c31.tar.gz
ingen-a645d2b8be4d7d31f6eef1649156b166a01e0c31.tar.bz2
ingen-a645d2b8be4d7d31f6eef1649156b166a01e0c31.zip
Use Glib string interning (quarks) to make Path/URI operator== very fast.
This avoids a ton of string comparison overhead in Ingen when setting various properties (e.g. "ingen:value" was compared several times every time a port value was changed, now this is just a single pointer comparison and the full round trip of a value change does no string comparison at all, but is still property based and RDFey). git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2408 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/GraphObjectImpl.hpp')
-rw-r--r--src/engine/GraphObjectImpl.hpp25
1 files changed, 9 insertions, 16 deletions
diff --git a/src/engine/GraphObjectImpl.hpp b/src/engine/GraphObjectImpl.hpp
index b9e13219..82ff7f53 100644
--- a/src/engine/GraphObjectImpl.hpp
+++ b/src/engine/GraphObjectImpl.hpp
@@ -51,9 +51,9 @@ class GraphObjectImpl : virtual public Ingen::Shared::GraphObject
public:
virtual ~GraphObjectImpl() {}
- const Raul::URI meta_uri() const { return _meta.uri(); }
- const Raul::URI uri() const { return path(); }
- const Raul::Symbol symbol() const { return _name; }
+ const Raul::URI& meta_uri() const { return _meta.uri(); }
+ const Raul::URI& uri() const { return _path; }
+ const Raul::Symbol& symbol() const { return _symbol; }
bool polyphonic() const { return _polyphonic; }
virtual bool set_polyphonic(Raul::Maid& maid, bool p) { _polyphonic = p; return true; }
@@ -67,9 +67,8 @@ public:
/** Rename */
virtual void set_path(const Raul::Path& new_path) {
- assert(new_path.parent() == path().parent());
- _name = new_path.name();
- assert(_name.find("/") == std::string::npos);
+ _path = new_path;
+ _symbol = new_path.symbol();
}
const Raul::Atom& get_property(const Raul::URI& key) const;
@@ -80,22 +79,16 @@ public:
virtual PatchImpl* parent_patch() const;
/** Raul::Path is dynamically generated from parent to ease renaming */
- const Raul::Path path() const {
- if (!_parent)
- return Raul::Path(std::string("/").append(_name));
- else if (_parent->path().is_root())
- return Raul::Path(std::string("/").append(_name));
- else
- return Raul::Path(_parent->path().child(_name));
- }
+ const Raul::Path& path() const { return _path; }
SharedPtr<GraphObject> find_child(const std::string& name) const;
protected:
- GraphObjectImpl(GraphObjectImpl* parent, const std::string& name, bool polyphonic=false);
+ GraphObjectImpl(GraphObjectImpl* parent, const Raul::Symbol& symbol, bool polyphonic=false);
GraphObjectImpl* _parent;
- std::string _name;
+ Raul::Path _path;
+ Raul::Symbol _symbol;
ResourceImpl _meta;
bool _polyphonic;
};