summaryrefslogtreecommitdiffstats
path: root/src/shared/LV2URIMap.cpp
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/shared/LV2URIMap.cpp
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/shared/LV2URIMap.cpp')
-rw-r--r--src/shared/LV2URIMap.cpp51
1 files changed, 42 insertions, 9 deletions
diff --git a/src/shared/LV2URIMap.cpp b/src/shared/LV2URIMap.cpp
index d0c71acf..37856fe6 100644
--- a/src/shared/LV2URIMap.cpp
+++ b/src/shared/LV2URIMap.cpp
@@ -30,16 +30,49 @@ namespace Ingen {
namespace Shared {
+LV2URIMap::Quark::Quark(const char* c_str)
+ : Raul::URI(c_str)
+ , id(g_quark_from_string(c_str))
+{
+}
+
+
LV2URIMap::LV2URIMap()
- : object_class_bool(uri_to_id(NULL, LV2_OBJECT_URI "#Bool"))
- , object_class_string(uri_to_id(NULL, LV2_OBJECT_URI "#String"))
- , object_class_int32(uri_to_id(NULL, LV2_OBJECT_URI "#Int32"))
- , object_class_float32(uri_to_id(NULL, LV2_OBJECT_URI "#Float32"))
- , object_class_vector(uri_to_id(NULL, LV2_OBJECT_URI "#Vector"))
- , ui_format_events(uri_to_id(NULL, "http://lv2plug.in/ns/extensions/ui#Events"))
- , midi_event(uri_to_id(NULL, "http://lv2plug.in/ns/ext/midi#MidiEvent"))
- , string_transfer(uri_to_id(NULL, "http://lv2plug.in/ns/dev/string-port#StringTransfer"))
- , object_transfer(uri_to_id(NULL, LV2_OBJECT_URI "#ObjectTransfer"))
+ : ctx_context("ctx:context")
+ , ctx_AudioContext("ctx:AudioContext")
+ , ctx_MessageContext("ctx:MessageContext")
+ , doap_name("doap:name")
+ , ingen_LADSPAPlugin("ingen:LADSPAPlugin")
+ , ingen_Internal("ingen:Internal")
+ , ingen_Node("ingen:Node")
+ , ingen_Patch("ingen:Patch")
+ , ingen_Port("ingen:Port")
+ , ingen_broadcast("ingen:broadcast")
+ , ingen_enabled("ingen:enabled")
+ , ingen_polyphonic("ingen:polyphonic")
+ , ingen_polyphony("ingen:polyphony")
+ , ingen_selected("ingen:selected")
+ , ingen_value("ingen:value")
+ , ingenui_canvas_x("ingenui:canvas-x")
+ , ingenui_canvas_y("ingenui:canvas-y")
+ , lv2_Plugin("lv2:Plugin")
+ , lv2_index("lv2:index")
+ , lv2_maximum("lv2:maximum")
+ , lv2_minimum("lv2:minimum")
+ , lv2_name("lv2:name")
+ , lv2_symbol("lv2:symbol")
+ , lv2_toggled("lv2:toggled")
+ , midi_event("http://lv2plug.in/ns/ext/midi#MidiEvent")
+ , object_class_bool(LV2_OBJECT_URI "#Bool")
+ , object_class_float32(LV2_OBJECT_URI "#Float32")
+ , object_class_int32(LV2_OBJECT_URI "#Int32")
+ , object_class_string(LV2_OBJECT_URI "#String")
+ , object_class_vector(LV2_OBJECT_URI "#Vector")
+ , object_transfer(LV2_OBJECT_URI "#ObjectTransfer")
+ , rdf_instanceOf("rdf:instanceOf")
+ , rdf_type("rdf:type")
+ , string_transfer("http://lv2plug.in/ns/dev/string-port#StringTransfer")
+ , ui_format_events("http://lv2plug.in/ns/extensions/ui#Events")
{
uri_map_feature_data.uri_to_id = &LV2URIMap::uri_map_uri_to_id;
uri_map_feature_data.callback_data = this;