summaryrefslogtreecommitdiffstats
path: root/src/shared
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/AtomReader.cpp276
-rw-r--r--src/shared/AtomWriter.cpp301
-rw-r--r--src/shared/Builder.cpp55
-rw-r--r--src/shared/ClashAvoider.cpp206
-rw-r--r--src/shared/Configuration.cpp56
-rw-r--r--src/shared/Forge.cpp56
-rw-r--r--src/shared/LV2Features.cpp65
-rw-r--r--src/shared/Store.cpp101
-rw-r--r--src/shared/URIMap.cpp97
-rw-r--r--src/shared/URIs.cpp128
-rw-r--r--src/shared/World.cpp323
-rw-r--r--src/shared/runtime_paths.cpp116
-rw-r--r--src/shared/wscript44
13 files changed, 0 insertions, 1824 deletions
diff --git a/src/shared/AtomReader.cpp b/src/shared/AtomReader.cpp
deleted file mode 100644
index 862c61b1..00000000
--- a/src/shared/AtomReader.cpp
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <utility>
-
-#include "ingen/shared/AtomReader.hpp"
-#include "ingen/shared/URIMap.hpp"
-#include "lv2/lv2plug.in/ns/ext/atom/util.h"
-#include "raul/Path.hpp"
-#include "raul/log.hpp"
-
-namespace Ingen {
-namespace Shared {
-
-AtomReader::AtomReader(URIMap& map, URIs& uris, Forge& forge, Interface& iface)
- : _map(map)
- , _uris(uris)
- , _forge(forge)
- , _iface(iface)
-{
-}
-
-void
-AtomReader::get_atom(const LV2_Atom* in, Raul::Atom& out)
-{
- if (in) {
- if (in->type == _uris.atom_URID) {
- const LV2_Atom_URID* urid = (const LV2_Atom_URID*)in;
- const char* uri = _map.unmap_uri(urid->body);
- if (uri) {
- out = _forge.alloc_uri(_map.unmap_uri(urid->body));
- } else {
- Raul::error(Raul::fmt("Unable to unmap URID %1%\n")
- % urid->body);
- }
- } else {
- out = _forge.alloc(in->size, in->type, LV2_ATOM_BODY(in));
- }
- }
-}
-
-void
-AtomReader::get_props(const LV2_Atom_Object* obj,
- Ingen::Resource::Properties& props)
-{
- if (obj->body.otype) {
- props.insert(
- std::make_pair(_uris.rdf_type,
- _forge.alloc_uri(_map.unmap_uri(obj->body.otype))));
- }
- LV2_ATOM_OBJECT_FOREACH(obj, p) {
- Raul::Atom val;
- get_atom(&p->value, val);
- props.insert(std::make_pair(_map.unmap_uri(p->key), val));
- }
-}
-
-const char*
-AtomReader::atom_to_uri(const LV2_Atom* atom)
-{
- if (atom && atom->type == _uris.atom_URI) {
- return (const char*)LV2_ATOM_BODY(atom);
- } else if (atom && atom->type == _uris.atom_URID) {
- return _map.unmap_uri(((LV2_Atom_URID*)atom)->body);
- } else {
- return NULL;
- }
-}
-
-bool
-AtomReader::is_message(URIs& uris, const LV2_Atom* msg)
-{
- if (msg->type != uris.atom_Blank && msg->type != uris.atom_Resource) {
- return false;
- }
-
- const LV2_Atom_Object* obj = (const LV2_Atom_Object*)msg;
- return (obj->body.otype == uris.patch_Get ||
- obj->body.otype == uris.patch_Delete ||
- obj->body.otype == uris.patch_Put ||
- obj->body.otype == uris.patch_Patch ||
- obj->body.otype == uris.patch_Move ||
- obj->body.otype == uris.patch_Response);
-}
-
-bool
-AtomReader::write(const LV2_Atom* msg)
-{
- if (msg->type != _uris.atom_Blank && msg->type != _uris.atom_Resource) {
- Raul::warn << (Raul::fmt("Unknown message type <%1%>\n")
- % _map.unmap_uri(msg->type)).str();
- return false;
- }
-
- const LV2_Atom_Object* obj = (const LV2_Atom_Object*)msg;
- const LV2_Atom* subject = NULL;
-
- lv2_atom_object_get(obj, (LV2_URID)_uris.patch_subject, &subject, NULL);
- const char* subject_uri = atom_to_uri(subject);
-
- if (obj->body.otype == _uris.patch_Get) {
- _iface.set_response_id(obj->body.id);
- _iface.get(subject_uri);
- } else if (obj->body.otype == _uris.patch_Delete) {
- const LV2_Atom_Object* body = NULL;
- lv2_atom_object_get(obj, (LV2_URID)_uris.patch_body, &body, 0);
-
- if (subject_uri && !body) {
- _iface.del(subject_uri);
- return true;
- } else if (body && body->body.otype == _uris.ingen_Edge) {
- const LV2_Atom* tail = NULL;
- const LV2_Atom* head = NULL;
- const LV2_Atom* incidentTo = NULL;
- lv2_atom_object_get(body,
- (LV2_URID)_uris.ingen_tail, &tail,
- (LV2_URID)_uris.ingen_head, &head,
- (LV2_URID)_uris.ingen_incidentTo, &incidentTo,
- NULL);
-
- Raul::Atom tail_atom;
- Raul::Atom head_atom;
- Raul::Atom incidentTo_atom;
- get_atom(tail, tail_atom);
- get_atom(head, head_atom);
- get_atom(incidentTo, incidentTo_atom);
- if (tail_atom.is_valid() && head_atom.is_valid()) {
- _iface.disconnect(Raul::Path(tail_atom.get_uri()),
- Raul::Path(head_atom.get_uri()));
- } else if (incidentTo_atom.is_valid()) {
- _iface.disconnect_all(subject_uri,
- Raul::Path(incidentTo_atom.get_uri()));
- } else {
- Raul::warn << "Delete of unknown object." << std::endl;
- return false;
- }
- }
- } else if (obj->body.otype == _uris.patch_Put) {
- const LV2_Atom_Object* body = NULL;
- lv2_atom_object_get(obj, (LV2_URID)_uris.patch_body, &body, 0);
- if (!body) {
- Raul::warn << "Put message has no body" << std::endl;
- return false;
- } else if (!subject_uri) {
- Raul::warn << "Put message has no subject" << std::endl;
- return false;
- }
-
- if (body->body.otype == _uris.ingen_Edge) {
- LV2_Atom* tail = NULL;
- LV2_Atom* head = NULL;
- lv2_atom_object_get(body,
- (LV2_URID)_uris.ingen_tail, &tail,
- (LV2_URID)_uris.ingen_head, &head,
- NULL);
- if (!tail || !head) {
- Raul::warn << "Edge has no tail or head" << std::endl;
- return false;
- }
-
- Raul::Atom tail_atom;
- Raul::Atom head_atom;
- get_atom(tail, tail_atom);
- get_atom(head, head_atom);
- _iface.connect(Raul::Path(tail_atom.get_uri()),
- Raul::Path(head_atom.get_uri()));
- } else {
- Ingen::Resource::Properties props;
- get_props(body, props);
- _iface.set_response_id(obj->body.id);
- _iface.put(subject_uri, props);
- }
- } else if (obj->body.otype == _uris.patch_Set) {
- const LV2_Atom_Object* body = NULL;
- lv2_atom_object_get(obj, (LV2_URID)_uris.patch_body, &body, 0);
- if (!body) {
- Raul::warn << "Set message has no body" << std::endl;
- return false;
- } else if (!subject_uri) {
- Raul::warn << "Set message has no subject" << std::endl;
- return false;
- }
-
- LV2_ATOM_OBJECT_FOREACH(body, p) {
- Raul::Atom val;
- get_atom(&p->value, val);
- _iface.set_property(subject_uri, _map.unmap_uri(p->key), val);
- }
- } else if (obj->body.otype == _uris.patch_Patch) {
- if (!subject_uri) {
- Raul::warn << "Put message has no subject" << std::endl;
- return false;
- }
-
- const LV2_Atom_Object* remove = NULL;
- lv2_atom_object_get(obj, (LV2_URID)_uris.patch_remove, &remove, 0);
- if (!remove) {
- Raul::warn << "Patch message has no remove" << std::endl;
- return false;
- }
-
- const LV2_Atom_Object* add = NULL;
- lv2_atom_object_get(obj, (LV2_URID)_uris.patch_add, &add, 0);
- if (!add) {
- Raul::warn << "Patch message has no add" << std::endl;
- return false;
- }
-
- Ingen::Resource::Properties add_props;
- get_props(remove, add_props);
-
- Ingen::Resource::Properties remove_props;
- get_props(remove, remove_props);
-
- _iface.delta(subject_uri, remove_props, add_props);
- } else if (obj->body.otype == _uris.patch_Move) {
- if (!subject_uri) {
- Raul::warn << "Move message has no subject" << std::endl;
- return false;
- }
-
- const LV2_Atom* dest = NULL;
- lv2_atom_object_get(obj, (LV2_URID)_uris.patch_destination, &dest, 0);
- if (!dest) {
- Raul::warn << "Move message has no destination" << std::endl;
- return false;
- }
-
- const char* dest_uri = atom_to_uri(dest);
- if (!dest_uri) {
- Raul::warn << "Move message destination is not a URI" << std::endl;
- return false;
- }
-
- _iface.move(subject_uri, dest_uri);
- } else if (obj->body.otype == _uris.patch_Response) {
- const LV2_Atom* request = NULL;
- const LV2_Atom* body = NULL;
- lv2_atom_object_get(obj,
- (LV2_URID)_uris.patch_request, &request,
- (LV2_URID)_uris.patch_body, &body,
- 0);
- if (!request || request->type != _uris.atom_Int) {
- Raul::warn << "Response message has no request" << std::endl;
- return false;
- } else if (!body || body->type != _uris.atom_Int) {
- Raul::warn << "Response message body is not integer" << std::endl;
- return false;
- }
- _iface.response(((LV2_Atom_Int*)request)->body,
- (Ingen::Status)((LV2_Atom_Int*)body)->body,
- subject_uri);
- } else {
- Raul::warn << "Unknown object type <"
- << _map.unmap_uri(obj->body.otype)
- << ">" << std::endl;
- }
-
- return true;
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/AtomWriter.cpp b/src/shared/AtomWriter.cpp
deleted file mode 100644
index 80bd0156..00000000
--- a/src/shared/AtomWriter.cpp
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <string>
-
-#include "ingen/shared/AtomSink.hpp"
-#include "ingen/shared/AtomWriter.hpp"
-#include "ingen/shared/URIMap.hpp"
-#include "raul/Path.hpp"
-#include "serd/serd.h"
-
-namespace Ingen {
-namespace Shared {
-
-static LV2_Atom_Forge_Ref
-forge_sink(LV2_Atom_Forge_Sink_Handle handle,
- const void* buf,
- uint32_t size)
-{
- SerdChunk* chunk = (SerdChunk*)handle;
- const LV2_Atom_Forge_Ref ref = chunk->len + 1;
- serd_chunk_sink(buf, size, chunk);
- return ref;
-}
-
-static LV2_Atom*
-forge_deref(LV2_Atom_Forge_Sink_Handle handle, LV2_Atom_Forge_Ref ref)
-{
- SerdChunk* chunk = (SerdChunk*)handle;
- return (LV2_Atom*)(chunk->buf + ref - 1);
-}
-
-AtomWriter::AtomWriter(URIMap& map, URIs& uris, AtomSink& sink)
- : _map(map)
- , _uris(uris)
- , _sink(sink)
- , _id(1)
-{
- _out.buf = NULL;
- _out.len = 0;
- lv2_atom_forge_init(&_forge, &map.urid_map_feature()->urid_map);
- lv2_atom_forge_set_sink(&_forge, forge_sink, forge_deref, &_out);
-}
-
-void
-AtomWriter::finish_msg()
-{
- _sink.write((LV2_Atom*)_out.buf);
- _out.len = 0;
-}
-
-int32_t
-AtomWriter::next_id()
-{
- if (_id == -1) {
- return 0;
- } else {
- return ++_id;
- }
-}
-
-void
-AtomWriter::bundle_begin()
-{
-}
-
-void
-AtomWriter::bundle_end()
-{
-}
-
-void
-AtomWriter::forge_uri(const Raul::URI& uri)
-{
- if (serd_uri_string_has_scheme((const uint8_t*)uri.c_str())) {
- lv2_atom_forge_urid(&_forge, _map.map_uri(uri.c_str()));
- } else {
- lv2_atom_forge_uri(&_forge, uri.c_str(), uri.length());
- }
-}
-
-void
-AtomWriter::forge_properties(const Resource::Properties& properties)
-{
- for (Resource::Properties::const_iterator i = properties.begin();
- i != properties.end(); ++i) {
- lv2_atom_forge_property_head(&_forge, _map.map_uri(i->first.c_str()), 0);
- if (i->second.type() == _forge.URI) {
- forge_uri(i->second.get_uri());
- } else {
- lv2_atom_forge_atom(&_forge, i->second.size(), i->second.type());
- lv2_atom_forge_write(&_forge, i->second.get_body(), i->second.size());
- }
- }
-}
-
-void
-AtomWriter::forge_edge(const Raul::URI& tail, const Raul::URI& head)
-{
- LV2_Atom_Forge_Frame edge;
- lv2_atom_forge_blank(&_forge, &edge, 0, _uris.ingen_Edge);
- lv2_atom_forge_property_head(&_forge, _uris.ingen_tail, 0);
- forge_uri(tail);
- lv2_atom_forge_property_head(&_forge, _uris.ingen_head, 0);
- forge_uri(head);
- lv2_atom_forge_pop(&_forge, &edge);
-}
-
-void
-AtomWriter::put(const Raul::URI& uri,
- const Resource::Properties& properties,
- Resource::Graph ctx)
-{
- LV2_Atom_Forge_Frame msg;
- lv2_atom_forge_blank(&_forge, &msg, next_id(), _uris.patch_Put);
- lv2_atom_forge_property_head(&_forge, _uris.patch_subject, 0);
- forge_uri(uri);
- lv2_atom_forge_property_head(&_forge, _uris.patch_body, 0);
-
- LV2_Atom_Forge_Frame body;
- lv2_atom_forge_blank(&_forge, &body, 0, 0);
- forge_properties(properties);
- lv2_atom_forge_pop(&_forge, &body);
-
- lv2_atom_forge_pop(&_forge, &msg);
- finish_msg();
-}
-
-void
-AtomWriter::delta(const Raul::URI& uri,
- const Resource::Properties& remove,
- const Resource::Properties& add)
-{
- LV2_Atom_Forge_Frame msg;
- lv2_atom_forge_blank(&_forge, &msg, next_id(), _uris.patch_Patch);
- lv2_atom_forge_property_head(&_forge, _uris.patch_subject, 0);
- forge_uri(uri);
-
- lv2_atom_forge_property_head(&_forge, _uris.patch_remove, 0);
- LV2_Atom_Forge_Frame remove_obj;
- lv2_atom_forge_blank(&_forge, &remove_obj, 0, 0);
- forge_properties(remove);
- lv2_atom_forge_pop(&_forge, &remove_obj);
-
- lv2_atom_forge_property_head(&_forge, _uris.patch_add, 0);
- LV2_Atom_Forge_Frame add_obj;
- lv2_atom_forge_blank(&_forge, &add_obj, 0, 0);
- forge_properties(add);
- lv2_atom_forge_pop(&_forge, &add_obj);
-
- lv2_atom_forge_pop(&_forge, &msg);
- finish_msg();
-}
-
-void
-AtomWriter::move(const Raul::Path& old_path,
- const Raul::Path& new_path)
-{
- LV2_Atom_Forge_Frame msg;
- lv2_atom_forge_blank(&_forge, &msg, next_id(), _uris.patch_Move);
- lv2_atom_forge_property_head(&_forge, _uris.patch_subject, 0);
- forge_uri(old_path);
- lv2_atom_forge_property_head(&_forge, _uris.patch_destination, 0);
- forge_uri(new_path);
-}
-
-void
-AtomWriter::del(const Raul::URI& uri)
-{
- LV2_Atom_Forge_Frame msg;
- lv2_atom_forge_blank(&_forge, &msg, next_id(), _uris.patch_Delete);
- lv2_atom_forge_property_head(&_forge, _uris.patch_subject, 0);
- forge_uri(uri);
-}
-
-void
-AtomWriter::connect(const Raul::Path& tail,
- const Raul::Path& head)
-{
- LV2_Atom_Forge_Frame msg;
- lv2_atom_forge_blank(&_forge, &msg, next_id(), _uris.patch_Put);
- lv2_atom_forge_property_head(&_forge, _uris.patch_subject, 0);
- forge_uri(Raul::Path::lca(tail, head));
- lv2_atom_forge_property_head(&_forge, _uris.patch_body, 0);
- forge_edge(tail, head);
- lv2_atom_forge_pop(&_forge, &msg);
- finish_msg();
-}
-
-void
-AtomWriter::disconnect(const Raul::Path& tail,
- const Raul::Path& head)
-{
- LV2_Atom_Forge_Frame msg;
- lv2_atom_forge_blank(&_forge, &msg, next_id(), _uris.patch_Delete);
- lv2_atom_forge_property_head(&_forge, _uris.patch_body, 0);
- forge_edge(tail, head);
- lv2_atom_forge_pop(&_forge, &msg);
- finish_msg();
-}
-
-void
-AtomWriter::disconnect_all(const Raul::Path& parent_patch_path,
- const Raul::Path& path)
-{
- LV2_Atom_Forge_Frame msg;
- lv2_atom_forge_blank(&_forge, &msg, next_id(), _uris.patch_Delete);
-
- lv2_atom_forge_property_head(&_forge, _uris.patch_subject, 0);
- forge_uri(parent_patch_path);
-
- lv2_atom_forge_property_head(&_forge, _uris.patch_body, 0);
- LV2_Atom_Forge_Frame edge;
- lv2_atom_forge_blank(&_forge, &edge, 0, _uris.ingen_Edge);
- lv2_atom_forge_property_head(&_forge, _uris.ingen_incidentTo, 0);
- forge_uri(path);
- lv2_atom_forge_pop(&_forge, &edge);
-
- lv2_atom_forge_pop(&_forge, &msg);
- finish_msg();
-}
-
-void
-AtomWriter::set_property(const Raul::URI& subject,
- const Raul::URI& predicate,
- const Raul::Atom& value)
-{
- LV2_Atom_Forge_Frame msg;
- lv2_atom_forge_blank(&_forge, &msg, next_id(), _uris.patch_Set);
- lv2_atom_forge_property_head(&_forge, _uris.patch_subject, 0);
- forge_uri(subject);
- lv2_atom_forge_property_head(&_forge, _uris.patch_body, 0);
-
- LV2_Atom_Forge_Frame body;
- lv2_atom_forge_blank(&_forge, &body, 0, 0);
- lv2_atom_forge_property_head(&_forge, _map.map_uri(predicate.c_str()), 0);
- lv2_atom_forge_atom(&_forge, value.size(), value.type());
- lv2_atom_forge_write(&_forge, value.get_body(), value.size());
- lv2_atom_forge_pop(&_forge, &body);
-
- lv2_atom_forge_pop(&_forge, &msg);
- finish_msg();
-}
-
-void
-AtomWriter::set_response_id(int32_t id)
-{
-}
-
-void
-AtomWriter::get(const Raul::URI& uri)
-{
- LV2_Atom_Forge_Frame msg;
- lv2_atom_forge_blank(&_forge, &msg, next_id(), _uris.patch_Get);
- lv2_atom_forge_property_head(&_forge, _uris.patch_subject, 0);
- forge_uri(uri);
- lv2_atom_forge_pop(&_forge, &msg);
- finish_msg();
-}
-
-void
-AtomWriter::response(int32_t id, Status status, const std::string& subject)
-{
- if (id == -1) {
- return;
- }
-
- LV2_Atom_Forge_Frame msg;
- lv2_atom_forge_blank(&_forge, &msg, next_id(), _uris.patch_Response);
- lv2_atom_forge_property_head(&_forge, _uris.patch_request, 0);
- lv2_atom_forge_int(&_forge, id);
- if (!subject.empty() && Raul::URI::is_valid(subject)) {
- lv2_atom_forge_property_head(&_forge, _uris.patch_subject, 0);
- lv2_atom_forge_uri(&_forge, subject.c_str(), subject.length());
- }
- lv2_atom_forge_property_head(&_forge, _uris.patch_body, 0);
- lv2_atom_forge_int(&_forge, status);
- lv2_atom_forge_pop(&_forge, &msg);
- finish_msg();
-}
-
-void
-AtomWriter::error(const std::string& msg)
-{
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/Builder.cpp b/src/shared/Builder.cpp
deleted file mode 100644
index dadd2989..00000000
--- a/src/shared/Builder.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "ingen/Edge.hpp"
-#include "ingen/GraphObject.hpp"
-#include "ingen/Interface.hpp"
-#include "ingen/shared/Builder.hpp"
-#include "ingen/shared/URIs.hpp"
-#include "raul/Atom.hpp"
-#include "raul/Path.hpp"
-
-using namespace std;
-
-namespace Ingen {
-namespace Shared {
-
-Builder::Builder(Shared::URIs& uris, Interface& interface)
- : _uris(uris)
- , _interface(interface)
-{
-}
-
-void
-Builder::build(SharedPtr<const GraphObject> object)
-{
- _interface.put(object->path(), object->properties());
-}
-
-void
-Builder::connect(SharedPtr<const GraphObject> object)
-{
- if (object->graph_type() == GraphObject::PATCH) {
- for (GraphObject::Edges::const_iterator i = object->edges().begin();
- i != object->edges().end(); ++i) {
- _interface.connect(i->second->tail_path(), i->second->head_path());
- }
- return;
- }
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/ClashAvoider.cpp b/src/shared/ClashAvoider.cpp
deleted file mode 100644
index 8e6683e8..00000000
--- a/src/shared/ClashAvoider.cpp
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <cstdio>
-#include <sstream>
-#include <string>
-#include <utility>
-
-#include "raul/log.hpp"
-
-#include "ingen/shared/ClashAvoider.hpp"
-#include "ingen/shared/Store.hpp"
-
-using namespace std;
-
-namespace Ingen {
-namespace Shared {
-
-const Raul::URI
-ClashAvoider::map_uri(const Raul::URI& in)
-{
- if (Raul::Path::is_path(in))
- return map_path(in.str());
- else
- return in;
-}
-
-const Raul::Path
-ClashAvoider::map_path(const Raul::Path& in)
-{
- Raul::debug << "MAP PATH: " << in;
-
- unsigned offset = 0;
- bool has_offset = false;
- const size_t pos = in.find_last_of('_');
- if (pos != string::npos && pos != (in.length()-1)) {
- const std::string trailing = in.substr(pos + 1);
- has_offset = (sscanf(trailing.c_str(), "%u", &offset) > 0);
- }
-
- Raul::debug << "OFFSET: " << offset << endl;
-
- // Path without _n suffix
- Raul::Path base_path = in;
- if (has_offset)
- base_path = base_path.substr(0, base_path.find_last_of('_'));
-
- Raul::debug << "BASE: " << base_path << endl;
-
- SymbolMap::iterator m = _symbol_map.find(in);
- if (m != _symbol_map.end()) {
- Raul::debug << " (1) " << m->second << endl;
- return m->second;
- } else {
- typedef std::pair<SymbolMap::iterator, bool> InsertRecord;
-
- // See if parent is mapped
- Raul::Path parent = in.parent();
- do {
- Raul::debug << "CHECK: " << parent << endl;
- SymbolMap::iterator p = _symbol_map.find(parent);
- if (p != _symbol_map.end()) {
- const Raul::Path mapped = p->second.base() + in.substr(parent.base().length());
- InsertRecord i = _symbol_map.insert(make_pair(in, mapped));
- Raul::debug << " (2) " << i.first->second << endl;
- return i.first->second;
- }
- parent = parent.parent();
- } while (!parent.is_root());
-
- // No clash, use symbol unmodified
- if (!exists(in) && _symbol_map.find(in) == _symbol_map.end()) {
- InsertRecord i = _symbol_map.insert(make_pair(in, in));
- assert(i.second);
- Raul::debug << " (3) " << i.first->second << endl;
- return i.first->second;
-
- // Append _2 _3 etc until an unused symbol is found
- } else {
- while (true) {
- Offsets::iterator o = _offsets.find(base_path);
- if (o != _offsets.end()) {
- offset = ++o->second;
- } else {
- string parent_str = in.parent().base();
- parent_str = parent_str.substr(0, parent_str.find_last_of("/"));
- if (parent_str.empty())
- parent_str = "/";
- Raul::debug << "PARENT: " << parent_str << endl;
- }
-
- if (offset == 0)
- offset = 2;
-
- std::stringstream ss;
- ss << base_path << "_" << offset;
- if (!exists(ss.str())) {
- string name = base_path.symbol();
- if (name == "")
- name = "_";
- string str = ss.str();
- InsertRecord i = _symbol_map.insert(make_pair(in, str));
- Raul::debug << "HIT: offset = " << offset << ", str = " << str << endl;
- offset = _store.child_name_offset(in.parent(), name, false);
- _offsets.insert(make_pair(base_path, offset));
- Raul::debug << " (4) " << i.first->second << endl;
- return i.first->second;
- } else {
- Raul::debug << "MISSED OFFSET: " << in << " => " << ss.str() << endl;
- if (o != _offsets.end())
- offset = ++o->second;
- else
- ++offset;
- }
- }
- }
- }
-}
-
-bool
-ClashAvoider::exists(const Raul::Path& path) const
-{
- bool exists = (_store.find(path) != _store.end());
- if (exists)
- return true;
-
- if (_also_avoid)
- return (_also_avoid->find(path) != _also_avoid->end());
- else
- return false;
-}
-
-void
-ClashAvoider::put(const Raul::URI& path,
- const Resource::Properties& properties,
- Resource::Graph ctx)
-{
- _target.put(map_uri(path), properties, ctx);
-}
-
-void
-ClashAvoider::delta(const Raul::URI& path,
- const Resource::Properties& remove,
- const Resource::Properties& add)
-{
- _target.delta(map_uri(path), remove, add);
-}
-
-void
-ClashAvoider::move(const Raul::Path& old_path,
- const Raul::Path& new_path)
-{
- _target.move(map_path(old_path), map_path(new_path));
-}
-
-void
-ClashAvoider::connect(const Raul::Path& tail,
- const Raul::Path& head)
-{
- _target.connect(map_path(tail), map_path(head));
-}
-
-void
-ClashAvoider::disconnect(const Raul::Path& tail,
- const Raul::Path& head)
-{
- _target.disconnect(map_path(tail), map_path(head));
-}
-
-void
-ClashAvoider::disconnect_all(const Raul::Path& parent_patch,
- const Raul::Path& path)
-{
- _target.disconnect_all(map_path(parent_patch), map_path(path));
-}
-
-void
-ClashAvoider::set_property(const Raul::URI& subject,
- const Raul::URI& predicate,
- const Raul::Atom& value)
-{
- _target.set_property(map_uri(subject), predicate, value);
-}
-
-void
-ClashAvoider::del(const Raul::URI& uri)
-{
- if (Raul::Path::is_path(uri))
- _target.del(map_path(Raul::Path(uri.str())));
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/Configuration.cpp b/src/shared/Configuration.cpp
deleted file mode 100644
index 28038466..00000000
--- a/src/shared/Configuration.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "ingen/shared/Configuration.hpp"
-
-namespace Ingen {
-namespace Shared {
-
-Configuration::Configuration()
- : Raul::Configuration(
- "A realtime modular audio processor.",
- "Ingen is a flexible modular system that be used in various ways.\n"
- "The engine can run as a stand-alone server controlled via network protocol,\n"
- "or internal to another process (e.g. the GUI). The GUI, or other\n"
- "clients, can communicate with the engine via any supported protocol, or host the\n"
- "engine in the same process. Many clients can connect to an engine at once.\n\n"
- "Examples:\n"
- " ingen -e # Run an engine, listen for connections\n"
- " ingen -g # Run a GUI, connect to running engine\n"
- " ingen -eg # Run an engine and a GUI in one process\n"
- " ingen -egl patch.ttl # Run an engine and a GUI and load a patch file\n"
- " ingen -egl patch.ingen # Run an engine and a GUI and load a patch bundle")
-{
- add("client-port", 'C', "Client port", INT, Value());
- add("connect", 'c', "Connect to engine URI", STRING, Value("unix:///tmp/ingen.sock"));
- add("engine", 'e', "Run (JACK) engine", BOOL, Value(false));
- add("engine-port", 'E', "Engine listen port", INT, Value(16180));
- add("socket", 'S', "Engine socket path", STRING, Value("/tmp/ingen.sock"));
- add("gui", 'g', "Launch the GTK graphical interface", BOOL, Value(false));
- add("help", 'h', "Print this help message", BOOL, Value(false));
- add("jack-client", 'n', "JACK client name", STRING, Value("ingen"));
- add("jack-server", 's', "JACK server name", STRING, Value(""));
- add("uuid", 'u', "JACK session UUID", STRING, Value());
- add("load", 'l', "Load patch", STRING, Value());
- add("packet-size", 'k', "Maximum UDP packet size", INT, Value(4096));
- add("parallelism", 'p', "Number of concurrent process threads", INT, Value(1));
- add("path", 'L', "Target path for loaded patch", STRING, Value());
- add("queue-size", 'q', "Event queue size", INT, Value(4096));
- add("run", 'r', "Run script", STRING, Value());
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/Forge.cpp b/src/shared/Forge.cpp
deleted file mode 100644
index b667cf1c..00000000
--- a/src/shared/Forge.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <sstream>
-#include <string>
-
-#include "ingen/shared/Forge.hpp"
-#include "ingen/shared/URIMap.hpp"
-#include "lv2/lv2plug.in/ns/ext/atom/atom.h"
-
-namespace Ingen {
-namespace Shared {
-
-Forge::Forge(Shared::URIMap& map)
-{
- Int = map.map_uri(LV2_ATOM__Int);
- Float = map.map_uri(LV2_ATOM__Float);
- Bool = map.map_uri(LV2_ATOM__Bool);
- URI = map.map_uri(LV2_ATOM__URI);
- URID = map.map_uri(LV2_ATOM__URID);
- String = map.map_uri(LV2_ATOM__String);
-}
-
-std::string
-Forge::str(const Raul::Atom& atom)
-{
- std::ostringstream ss;
- if (atom.type() == Int) {
- ss << atom.get_int32();
- } else if (atom.type() == Float) {
- ss << atom.get_float();
- } else if (atom.type() == Bool) {
- ss << (atom.get_bool() ? "true" : "false");
- } else if (atom.type() == URI) {
- ss << "<" << atom.get_uri() << ">";
- } else if (atom.type() == String) {
- ss << "\"" << atom.get_string() << "\"";
- }
- return ss.str();
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/LV2Features.cpp b/src/shared/LV2Features.cpp
deleted file mode 100644
index 7061ff76..00000000
--- a/src/shared/LV2Features.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <cstdlib>
-
-#include "ingen/shared/LV2Features.hpp"
-
-using namespace std;
-
-namespace Ingen {
-namespace Shared {
-
-LV2Features::LV2Features()
-{
-}
-
-void
-LV2Features::add_feature(SharedPtr<Feature> feature)
-{
- _features.push_back(feature);
-}
-
-LV2Features::FeatureArray::FeatureArray(FeatureVector& features)
- : _features(features)
-{
- _array = (LV2_Feature**)malloc(sizeof(LV2_Feature) * (features.size() + 1));
- _array[features.size()] = NULL;
- for (size_t i = 0; i < features.size(); ++i) {
- _array[i] = features[i].get();
- }
-}
-
-LV2Features::FeatureArray::~FeatureArray()
-{
- free(_array);
-}
-
-SharedPtr<LV2Features::FeatureArray>
-LV2Features::lv2_features(Shared::World* world, GraphObject* node) const
-{
- FeatureArray::FeatureVector vec;
- for (Features::const_iterator f = _features.begin(); f != _features.end(); ++f) {
- SharedPtr<LV2_Feature> fptr = (*f)->feature(world, node);
- if (fptr) {
- vec.push_back(fptr);
- }
- }
- return SharedPtr<FeatureArray>(new FeatureArray(vec));
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/Store.cpp b/src/shared/Store.cpp
deleted file mode 100644
index ad950fd7..00000000
--- a/src/shared/Store.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <sstream>
-#include <string>
-
-#include "ingen/GraphObject.hpp"
-#include "ingen/shared/Store.hpp"
-#include "raul/PathTable.hpp"
-#include "raul/TableImpl.hpp"
-#include "raul/log.hpp"
-
-using namespace std;
-
-namespace Ingen {
-namespace Shared {
-
-void
-Store::add(GraphObject* o)
-{
- if (find(o->path()) != end()) {
- Raul::error << "[Store] Attempt to add duplicate object " << o->path() << endl;
- return;
- }
-
- insert(make_pair(o->path(), o));
-
- for (uint32_t i = 0; i < o->num_ports(); ++i) {
- add(o->port(i));
- }
-}
-
-Store::const_iterator
-Store::children_begin(SharedPtr<const GraphObject> o) const
-{
- const_iterator parent = find(o->path());
- assert(parent != end());
- ++parent;
- return parent;
-}
-
-Store::const_iterator
-Store::children_end(SharedPtr<const GraphObject> o) const
-{
- const_iterator parent = find(o->path());
- assert(parent != end());
- return find_descendants_end(parent);
-}
-
-SharedPtr<GraphObject>
-Store::find_child(SharedPtr<const GraphObject> parent,
- const string& child_name) const
-{
- const_iterator pi = find(parent->path());
- assert(pi != end());
- const_iterator children_end = find_descendants_end(pi);
- const_iterator child = find(pi, children_end, parent->path().base() + child_name);
- if (child != end())
- return child->second;
- else
- return SharedPtr<GraphObject>();
-}
-
-unsigned
-Store::child_name_offset(const Raul::Path& parent,
- const Raul::Symbol& symbol,
- bool allow_zero)
-{
- unsigned offset = 0;
-
- while (true) {
- std::stringstream ss;
- ss << symbol;
- if (offset > 0)
- ss << "_" << offset;
- if (find(parent.base() + ss.str()) == end() && (allow_zero || offset > 0))
- break;
- else if (offset == 0)
- offset = 2;
- else
- ++offset;
- }
-
- return offset;
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/URIMap.cpp b/src/shared/URIMap.cpp
deleted file mode 100644
index b8981fd3..00000000
--- a/src/shared/URIMap.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-
-#include <glib.h>
-
-#include "ingen/shared/URIMap.hpp"
-
-using namespace std;
-
-namespace Ingen {
-namespace Shared {
-
-URIMap::URIMap(LV2_URID_Map* map, LV2_URID_Unmap* unmap)
- : _urid_map_feature(new URIDMapFeature(this, map))
- , _urid_unmap_feature(new URIDUnmapFeature(this, unmap))
-{
-}
-
-URIMap::URIDMapFeature::URIDMapFeature(URIMap* map,
- LV2_URID_Map* impl)
- : Feature(LV2_URID__map, &urid_map)
-{
- if (impl) {
- urid_map = *impl;
- } else {
- urid_map.map = default_map;
- urid_map.handle = NULL;
- }
-}
-
-LV2_URID
-URIMap::URIDMapFeature::default_map(LV2_URID_Map_Handle handle,
- const char* uri)
-{
- return static_cast<LV2_URID>(g_quark_from_string(uri));
-}
-
-LV2_URID
-URIMap::URIDMapFeature::map(const char* uri)
-{
- return urid_map.map(urid_map.handle, uri);
-}
-
-URIMap::URIDUnmapFeature::URIDUnmapFeature(URIMap* map,
- LV2_URID_Unmap* impl)
- : Feature(LV2_URID__unmap, &urid_unmap)
-{
- if (impl) {
- urid_unmap = *impl;
- } else {
- urid_unmap.unmap = default_unmap;
- urid_unmap.handle = NULL;
- }
-}
-
-const char*
-URIMap::URIDUnmapFeature::default_unmap(LV2_URID_Unmap_Handle handle,
- LV2_URID urid)
-{
- return g_quark_to_string(urid);
-}
-
-const char*
-URIMap::URIDUnmapFeature::unmap(LV2_URID urid)
-{
- return urid_unmap.unmap(urid_unmap.handle, urid);
-}
-
-uint32_t
-URIMap::map_uri(const char* uri)
-{
- return _urid_map_feature->map(uri);
-}
-
-const char*
-URIMap::unmap_uri(uint32_t urid) const
-{
- return _urid_unmap_feature->unmap(urid);
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/URIs.cpp b/src/shared/URIs.cpp
deleted file mode 100644
index 102c7b8b..00000000
--- a/src/shared/URIs.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "ingen/shared/URIMap.hpp"
-#include "ingen/shared/URIs.hpp"
-#include "lv2/lv2plug.in/ns/ext/atom/atom.h"
-#include "lv2/lv2plug.in/ns/ext/midi/midi.h"
-#include "lv2/lv2plug.in/ns/ext/patch/patch.h"
-#include "lv2/lv2plug.in/ns/ext/port-props/port-props.h"
-#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
-
-namespace Ingen {
-namespace Shared {
-
-URIs::Quark::Quark(Shared::Forge& forge, URIMap* map, const char* c_str)
- : Raul::URI(c_str)
- , id(map->map_uri(c_str))
- , atom(forge.alloc_uri(c_str))
-{
-}
-
-#define NS_INGEN "http://drobilla.net/ns/ingen#"
-#define NS_RDF "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-#define NS_RDFS "http://www.w3.org/2000/01/rdf-schema#"
-
-URIs::URIs(Shared::Forge& f, URIMap* map)
- : forge(f)
- , atom_AtomPort (forge, map, LV2_ATOM__AtomPort)
- , atom_Blank (forge, map, LV2_ATOM__Blank)
- , atom_Bool (forge, map, LV2_ATOM__Bool)
- , atom_Chunk (forge, map, LV2_ATOM__Chunk)
- , atom_Float (forge, map, LV2_ATOM__Float)
- , atom_Int (forge, map, LV2_ATOM__Int)
- , atom_Resource (forge, map, LV2_ATOM__Resource)
- , atom_Sequence (forge, map, LV2_ATOM__Sequence)
- , atom_Sound (forge, map, LV2_ATOM__Sound)
- , atom_String (forge, map, LV2_ATOM__String)
- , atom_URI (forge, map, LV2_ATOM__URI)
- , atom_URID (forge, map, LV2_ATOM__URID)
- , atom_Vector (forge, map, LV2_ATOM__Vector)
- , atom_bufferType (forge, map, LV2_ATOM__bufferType)
- , atom_eventTransfer (forge, map, LV2_ATOM__eventTransfer)
- , atom_supports (forge, map, LV2_ATOM__supports)
- , doap_name (forge, map, "http://usefulinc.com/ns/doap#name")
- , ingen_Edge (forge, map, NS_INGEN "Edge")
- , ingen_Internal (forge, map, NS_INGEN "Internal")
- , ingen_Node (forge, map, NS_INGEN "Node")
- , ingen_Patch (forge, map, NS_INGEN "Patch")
- , ingen_activity (forge, map, NS_INGEN "activity")
- , ingen_broadcast (forge, map, NS_INGEN "broadcast")
- , ingen_canvasX (forge, map, NS_INGEN "canvasX")
- , ingen_canvasY (forge, map, NS_INGEN "canvasY")
- , ingen_controlBinding (forge, map, NS_INGEN "controlBinding")
- , ingen_document (forge, map, NS_INGEN "document")
- , ingen_enabled (forge, map, NS_INGEN "enabled")
- , ingen_engine (forge, map, NS_INGEN "engine")
- , ingen_head (forge, map, NS_INGEN "head")
- , ingen_incidentTo (forge, map, NS_INGEN "incidentTo")
- , ingen_nil (forge, map, NS_INGEN "nil")
- , ingen_node (forge, map, NS_INGEN "node")
- , ingen_polyphonic (forge, map, NS_INGEN "polyphonic")
- , ingen_polyphony (forge, map, NS_INGEN "polyphony")
- , ingen_prototype (forge, map, NS_INGEN "prototype")
- , ingen_sampleRate (forge, map, NS_INGEN "sampleRate")
- , ingen_status (forge, map, NS_INGEN "status")
- , ingen_tail (forge, map, NS_INGEN "tail")
- , ingen_uiEmbedded (forge, map, NS_INGEN "uiEmbedded")
- , ingen_value (forge, map, NS_INGEN "value")
- , lv2_AudioPort (forge, map, LV2_CORE__AudioPort)
- , lv2_CVPort (forge, map, LV2_CORE__CVPort)
- , lv2_ControlPort (forge, map, LV2_CORE__ControlPort)
- , lv2_InputPort (forge, map, LV2_CORE__InputPort)
- , lv2_OutputPort (forge, map, LV2_CORE__OutputPort)
- , lv2_Plugin (forge, map, LV2_CORE__Plugin)
- , lv2_connectionOptional(forge, map, LV2_CORE__connectionOptional)
- , lv2_default (forge, map, LV2_CORE__default)
- , lv2_index (forge, map, LV2_CORE__index)
- , lv2_integer (forge, map, LV2_CORE__integer)
- , lv2_maximum (forge, map, LV2_CORE__maximum)
- , lv2_minimum (forge, map, LV2_CORE__minimum)
- , lv2_name (forge, map, LV2_CORE__name)
- , lv2_portProperty (forge, map, LV2_CORE__portProperty)
- , lv2_sampleRate (forge, map, LV2_CORE__sampleRate)
- , lv2_scalePoint (forge, map, LV2_CORE__scalePoint)
- , lv2_symbol (forge, map, LV2_CORE__symbol)
- , lv2_toggled (forge, map, LV2_CORE__toggled)
- , midi_Bender (forge, map, LV2_MIDI__Bender)
- , midi_ChannelPressure (forge, map, LV2_MIDI__ChannelPressure)
- , midi_Controller (forge, map, LV2_MIDI__Controller)
- , midi_MidiEvent (forge, map, LV2_MIDI__MidiEvent)
- , midi_NoteOn (forge, map, LV2_MIDI__NoteOn)
- , midi_controllerNumber (forge, map, LV2_MIDI__controllerNumber)
- , midi_noteNumber (forge, map, LV2_MIDI__noteNumber)
- , patch_Delete (forge, map, LV2_PATCH__Delete)
- , patch_Get (forge, map, LV2_PATCH__Get)
- , patch_Move (forge, map, LV2_PATCH__Move)
- , patch_Patch (forge, map, LV2_PATCH__Patch)
- , patch_Put (forge, map, LV2_PATCH__Put)
- , patch_Response (forge, map, LV2_PATCH__Response)
- , patch_Set (forge, map, LV2_PATCH__Set)
- , patch_add (forge, map, LV2_PATCH__add)
- , patch_body (forge, map, LV2_PATCH__body)
- , patch_destination (forge, map, LV2_PATCH__destination)
- , patch_remove (forge, map, LV2_PATCH__remove)
- , patch_request (forge, map, LV2_PATCH__request)
- , patch_subject (forge, map, LV2_PATCH__subject)
- , pprops_logarithmic (forge, map, LV2_PORT_PROPS__logarithmic)
- , rdf_type (forge, map, NS_RDF "type")
- , rdfs_seeAlso (forge, map, NS_RDFS "seeAlso")
- , wildcard (forge, map, NS_INGEN "wildcard")
-{
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/World.cpp b/src/shared/World.cpp
deleted file mode 100644
index 05a941e9..00000000
--- a/src/shared/World.cpp
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <map>
-#include <string>
-
-#include <glibmm/fileutils.h>
-#include <glibmm/miscutils.h>
-#include <glibmm/module.h>
-
-#include "ingen/shared/Configuration.hpp"
-#include "ingen/shared/LV2Features.hpp"
-#include "ingen/shared/Module.hpp"
-#include "ingen/shared/URIMap.hpp"
-#include "ingen/shared/URIs.hpp"
-#include "ingen/shared/World.hpp"
-#include "ingen/shared/runtime_paths.hpp"
-#include "lilv/lilv.h"
-#include "raul/log.hpp"
-#include "sord/sordmm.hpp"
-
-#define LOG(s) (s("[World] "))
-
-using namespace std;
-
-namespace Ingen {
-
-class EngineBase;
-class Interface;
-
-namespace Serialisation { class Parser; class Serialiser; }
-
-namespace Shared {
-
-class Store;
-
-/** Load a dynamic module from the default path.
- *
- * This will check in the directories specified in the environment variable
- * INGEN_MODULE_PATH (typical colon delimited format), then the default module
- * installation directory (ie /usr/local/lib/ingen), in that order.
- *
- * \param name The base name of the module, e.g. "ingen_serialisation"
- */
-Glib::Module*
-ingen_load_module(const string& name)
-{
- Glib::Module* module = NULL;
-
- // Search INGEN_MODULE_PATH first
- bool module_path_found;
- string module_path = Glib::getenv("INGEN_MODULE_PATH", module_path_found);
- if (module_path_found) {
- string dir;
- istringstream iss(module_path);
- while (getline(iss, dir, G_SEARCHPATH_SEPARATOR)) {
- string filename = Shared::module_path(name, dir);
- if (Glib::file_test(filename, Glib::FILE_TEST_EXISTS)) {
- module = new Glib::Module(filename);
- if (*module) {
- LOG(Raul::info)(Raul::fmt("Loading %1%\n") % filename);
- return module;
- } else {
- Raul::error << Glib::Module::get_last_error() << endl;
- }
- }
- }
- }
-
- // Try default directory if not found
- module = new Glib::Module(Shared::module_path(name));
-
- if (module) {
- LOG(Raul::info)(Raul::fmt("Loading %1%\n") % Shared::module_path(name));
- return module;
- } else if (!module_path_found) {
- LOG(Raul::error)(Raul::fmt("Unable to find %1% (%2%)\n")
- % name % Glib::Module::get_last_error());
- return NULL;
- } else {
- LOG(Raul::error)(Raul::fmt("Unable to load %1% from %2% (%3%)\n")
- % name % module_path % Glib::Module::get_last_error());
- LOG(Raul::error)("Is Ingen installed?\n");
- return NULL;
- }
-}
-
-class World::Impl {
-public:
- Impl(int& a_argc,
- char**& a_argv,
- LV2_URID_Map* map,
- LV2_URID_Unmap* unmap)
- : argc(a_argc)
- , argv(a_argv)
- , lv2_features(NULL)
- , rdf_world(new Sord::World())
- , uri_map(new Ingen::Shared::URIMap(map, unmap))
- , forge(new Ingen::Shared::Forge(*uri_map))
- , uris(new Shared::URIs(*forge, uri_map))
- , lilv_world(lilv_world_new())
- {
- conf.parse(argc, argv);
- lv2_features = new Ingen::Shared::LV2Features();
- lv2_features->add_feature(uri_map->urid_map_feature());
- lv2_features->add_feature(uri_map->urid_unmap_feature());
- lilv_world_load_all(lilv_world);
-
- // Set up RDF namespaces
- rdf_world->add_prefix("atom", "http://lv2plug.in/ns/ext/atom#");
- rdf_world->add_prefix("patch", "http://lv2plug.in/ns/ext/patch#");
- rdf_world->add_prefix("doap", "http://usefulinc.com/ns/doap#");
- rdf_world->add_prefix("ingen", "http://drobilla.net/ns/ingen#");
- rdf_world->add_prefix("lv2", "http://lv2plug.in/ns/lv2core#");
- rdf_world->add_prefix("lv2ev", "http://lv2plug.in/ns/ext/event#");
- rdf_world->add_prefix("midi", "http://lv2plug.in/ns/ext/midi#");
- rdf_world->add_prefix("owl", "http://www.w3.org/2002/07/owl#");
- rdf_world->add_prefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#");
- rdf_world->add_prefix("xsd", "http://www.w3.org/2001/XMLSchema#");
- }
-
- ~Impl()
- {
- serialiser.reset();
- parser.reset();
- interface.reset();
- engine.reset();
- store.reset();
-
- interface_factories.clear();
- script_runners.clear();
-
- delete rdf_world;
- delete lv2_features;
- delete uris;
- delete forge;
- delete uri_map;
-
- lilv_world_free(lilv_world);
-
-
- for (Modules::iterator i = modules.begin(); i != modules.end(); ++i) {
- // Keep a reference to the library
- Glib::Module* lib = i->second->library;
-
- // Destroy the Ingen module
- delete i->second;
-
- // Now all references to library code should be done, close it
- delete lib;
- }
- }
-
- typedef std::map<const std::string, Module*> Modules;
- Modules modules;
-
- typedef std::map<const std::string, World::InterfaceFactory> InterfaceFactories;
- InterfaceFactories interface_factories;
-
- typedef bool (*ScriptRunner)(World* world, const char* filename);
- typedef std::map<const std::string, ScriptRunner> ScriptRunners;
- ScriptRunners script_runners;
-
- int& argc;
- char**& argv;
- Shared::Configuration conf;
- LV2Features* lv2_features;
- Sord::World* rdf_world;
- URIMap* uri_map;
- Shared::Forge* forge;
- URIs* uris;
- SharedPtr<Interface> interface;
- SharedPtr<EngineBase> engine;
- SharedPtr<Serialisation::Serialiser> serialiser;
- SharedPtr<Serialisation::Parser> parser;
- SharedPtr<Store> store;
- LilvWorld* lilv_world;
- std::string jack_uuid;
-};
-
-World::World(int& argc,
- char**& argv,
- LV2_URID_Map* map,
- LV2_URID_Unmap* unmap)
- : _impl(new Impl(argc, argv, map, unmap))
-{
-}
-
-World::~World()
-{
- delete _impl;
-}
-
-void World::set_engine(SharedPtr<EngineBase> e) { _impl->engine = e; }
-void World::set_interface(SharedPtr<Interface> i) { _impl->interface = i; }
-void World::set_parser(SharedPtr<Serialisation::Parser> p) { _impl->parser = p; }
-void World::set_serialiser(SharedPtr<Serialisation::Serialiser> s) { _impl->serialiser = s; }
-void World::set_store(SharedPtr<Store> s) { _impl->store = s; }
-
-SharedPtr<EngineBase> World::engine() { return _impl->engine; }
-SharedPtr<Interface> World::interface() { return _impl->interface; }
-SharedPtr<Serialisation::Parser> World::parser() { return _impl->parser; }
-SharedPtr<Serialisation::Serialiser> World::serialiser() { return _impl->serialiser; }
-SharedPtr<Store> World::store() { return _impl->store; }
-
-int& World::argc() { return _impl->argc; }
-char**& World::argv() { return _impl->argv; }
-Shared::Configuration& World::conf() { return _impl->conf; }
-
-Sord::World* World::rdf_world() { return _impl->rdf_world; }
-LilvWorld* World::lilv_world() { return _impl->lilv_world; }
-
-LV2Features& World::lv2_features() { return *_impl->lv2_features; }
-Shared::Forge& World::forge() { return *_impl->forge; }
-URIs& World::uris() { return *_impl->uris; }
-URIMap& World::uri_map() { return *_impl->uri_map; }
-
-bool
-World::load_module(const char* name)
-{
- Impl::Modules::iterator i = _impl->modules.find(name);
- if (i != _impl->modules.end()) {
- LOG(Raul::info)(Raul::fmt("Module `%1%' already loaded\n") % name);
- return true;
- }
- Glib::Module* lib = ingen_load_module(name);
- Ingen::Shared::Module* (*module_load)() = NULL;
- if (lib && lib->get_symbol("ingen_module_load", (void*&)module_load)) {
- Module* module = module_load();
- if (module) {
- module->library = lib;
- module->load(this);
- _impl->modules.insert(make_pair(string(name), module));
- return true;
- }
- }
-
- LOG(Raul::error)(Raul::fmt("Failed to load module `%1%'\n") % name);
- delete lib;
- return false;
-}
-
-bool
-World::run_module(const char* name)
-{
- Impl::Modules::iterator i = _impl->modules.find(name);
- if (i == _impl->modules.end()) {
- LOG(Raul::error) << "Attempt to run unloaded module `" << name << "'" << endl;
- return false;
- }
-
- i->second->run(this);
- return true;
-}
-
-void
-World::unload_modules()
-{
- _impl->modules.clear();
-}
-
-/** Get an interface for a remote engine at @a url
- */
-SharedPtr<Interface>
-World::new_interface(const std::string& engine_url,
- SharedPtr<Interface> respondee)
-{
- const string scheme = engine_url.substr(0, engine_url.find(":"));
- const Impl::InterfaceFactories::const_iterator i = _impl->interface_factories.find(scheme);
- if (i == _impl->interface_factories.end()) {
- Raul::warn << "Unknown URI scheme `" << scheme << "'" << endl;
- return SharedPtr<Interface>();
- }
-
- return i->second(this, engine_url, respondee);
-}
-
-/** Run a script of type @a mime_type at filename @a filename */
-bool
-World::run(const std::string& mime_type, const std::string& filename)
-{
- const Impl::ScriptRunners::const_iterator i = _impl->script_runners.find(mime_type);
- if (i == _impl->script_runners.end()) {
- Raul::warn << "Unknown script MIME type `" << mime_type << "'" << endl;
- return false;
- }
-
- return i->second(this, filename.c_str());
-}
-
-void
-World::add_interface_factory(const std::string& scheme, InterfaceFactory factory)
-{
- _impl->interface_factories.insert(make_pair(scheme, factory));
-}
-
-void
-World::set_jack_uuid(const std::string& uuid)
-{
- _impl->jack_uuid = uuid;
-}
-
-std::string
-World::jack_uuid()
-{
- return _impl->jack_uuid;
-}
-
-} // namespace Shared
-} // namespace Ingen
diff --git a/src/shared/runtime_paths.cpp b/src/shared/runtime_paths.cpp
deleted file mode 100644
index 8439b248..00000000
--- a/src/shared/runtime_paths.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <string>
-
-#include <limits.h>
-#include <stdlib.h>
-
-#include <dlfcn.h>
-
-#include <glibmm/module.h>
-#include <glibmm/miscutils.h>
-
-#include "raul/log.hpp"
-
-#include "ingen/shared/runtime_paths.hpp"
-
-#include "ingen_config.h"
-
-using namespace std;
-
-namespace Ingen {
-namespace Shared {
-
-static std::string bundle_path;
-
-/** Must be called once at startup, and passed a pointer to a function
- * that lives in the 'top level' of the bundle (e.g. the executable).
- * Passing a function defined in a module etc. will not work!
- */
-void
-set_bundle_path_from_code(void* function)
-{
- Dl_info dli;
- dladdr(function, &dli);
-
-#ifdef BUNDLE
- char bin_loc[PATH_MAX];
- realpath(dli.dli_fname, bin_loc);
-#else
- const char* bin_loc = dli.dli_fname;
-#endif
-
- Raul::info(Raul::fmt("Binary location: %1%\n") % bin_loc);
-
- string bundle = bin_loc;
- bundle = bundle.substr(0, bundle.find_last_of(G_DIR_SEPARATOR));
- bundle_path = bundle;
-}
-
-void
-set_bundle_path(const char* path)
-{
- bundle_path = path;
-}
-
-/** Return the absolute path of a file in an Ingen LV2 bundle
- */
-std::string
-bundle_file_path(const std::string& name)
-{
- return Glib::build_filename(bundle_path, name);
-}
-
-/** Return the absolute path of a 'resource' file.
- */
-std::string
-data_file_path(const std::string& name)
-{
-#ifdef BUNDLE
- return Glib::build_filename(bundle_path, Glib::build_path(INGEN_DATA_DIR, name));
-#else
- return Glib::build_filename(INGEN_DATA_DIR, name);
-#endif
-}
-
-/** Return the absolute path of a module (dynamically loaded shared library).
- */
-std::string
-module_path(const std::string& name, std::string dir)
-{
- std::string ret;
- if (dir == "") {
-#ifdef BUNDLE
- dir = Glib::build_path(bundle_path, INGEN_MODULE_DIR);
-#else
- dir = INGEN_MODULE_DIR;
-#endif
- }
-
- ret = Glib::Module::build_path(dir, string("ingen_") + name);
-
-#ifdef __APPLE__
- // MacPorts glib doesnt seem to do portable path building correctly...
- if (ret.substr(ret.length() - 3) == ".so")
- ret = ret.substr(0, ret.length() - 2).append("dylib");
-#endif
- return ret;
-}
-
-} // namespace Ingen
-} // namespace Shared
-
diff --git a/src/shared/wscript b/src/shared/wscript
deleted file mode 100644
index 8a873653..00000000
--- a/src/shared/wscript
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-from waflib.extras import autowaf as autowaf
-
-sources = [
- 'AtomReader.cpp',
- 'AtomWriter.cpp',
- 'Builder.cpp',
- 'ClashAvoider.cpp',
- 'Configuration.cpp',
- 'Forge.cpp',
- 'LV2Features.cpp',
- 'Store.cpp',
- 'URIMap.cpp',
- 'URIs.cpp',
- 'World.cpp',
- 'runtime_paths.cpp',
-]
-
-def build(bld):
- obj = bld(features = 'cxx cxxshlib',
- source = sources,
- export_includes = ['../..'],
- includes = ['../..'],
- name = 'libingen_shared',
- target = 'ingen_shared',
- use = 'libingen',
- vnum = '0.0.0',
- install_path = '${LIBDIR}',
- lib = ['dl'])
- autowaf.use_lib(bld, obj, 'GLIBMM LV2 LILV RAUL SORD LV2_MIDI')
-
- if bld.env['BUILD_TESTS']:
- obj = bld(features = 'cxx cxxshlib',
- source = sources,
- export_includes = ['../..'],
- includes = ['../..'],
- name = 'libingen_shared_profiled',
- target = 'ingen_shared_profiled',
- use = 'libingen',
- install_path = '',
- lib = ['dl'] + bld.env['INGEN_TEST_LIBS'],
- cxxflags = bld.env['INGEN_TEST_CXXFLAGS'])
- autowaf.use_lib(bld, obj, 'GLIBMM LV2 LILV RAUL SORD LV2_MIDI')
-