summaryrefslogtreecommitdiffstats
path: root/src/World.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/World.cpp')
-rw-r--r--src/World.cpp197
1 files changed, 134 insertions, 63 deletions
diff --git a/src/World.cpp b/src/World.cpp
index eb1674fc..03a47773 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -20,7 +20,6 @@
#include "ingen/Configuration.hpp"
#include "ingen/DataAccess.hpp"
#include "ingen/EngineBase.hpp"
-#include "ingen/FilePath.hpp"
#include "ingen/Forge.hpp"
#include "ingen/InstanceAccess.hpp"
#include "ingen/LV2Features.hpp"
@@ -33,7 +32,6 @@
#include "ingen/URIMap.hpp"
#include "ingen/URIs.hpp"
#include "ingen/ingen.h"
-#include "ingen/memory.hpp"
#include "ingen/runtime_paths.hpp"
#include "lilv/lilv.h"
#include "lv2/log/log.h"
@@ -41,6 +39,7 @@
#include "sord/sordmm.hpp"
#include <cstdint>
+#include <filesystem>
#include <list>
#include <map>
#include <memory>
@@ -68,37 +67,38 @@ ingen_load_library(Log& log, const string& name)
const auto path = ingen_module_path(name);
if (path.empty()) {
log.error("Failed to find %1% (%2%)\n",
- name, Library::get_last_error());
+ name,
+ Library::get_last_error());
return nullptr;
}
- std::unique_ptr<Library> library = make_unique<Library>(path);
+ log.info("Loading module %1%\n", path);
+
+ std::unique_ptr<Library> library = std::make_unique<Library>(path);
if (*library) {
return library;
}
log.error("Unable to load %1% from %2% (%3%)\n",
- name, path, Library::get_last_error());
+ name,
+ path,
+ Library::get_last_error());
return nullptr;
}
-class World::Impl {
+class World::Impl
+{
public:
- Impl(LV2_URID_Map* map,
- LV2_URID_Unmap* unmap,
- LV2_Log_Log* log_feature)
- : argc(nullptr)
- , argv(nullptr)
- , lv2_features(nullptr)
- , rdf_world(new Sord::World())
- , lilv_world(lilv_world_new(), lilv_world_free)
- , uri_map(log, map, unmap)
- , forge(uri_map)
- , uris(forge, &uri_map, lilv_world.get())
- , conf(forge)
- , log(log_feature, uris)
+ Impl(LV2_URID_Map* map, LV2_URID_Unmap* unmap, LV2_Log_Log* log_feature)
+ : lv2_features(new LV2Features())
+ , rdf_world(new Sord::World())
+ , lilv_world(lilv_world_new(), lilv_world_free)
+ , uri_map(log, map, unmap)
+ , forge(uri_map)
+ , uris(forge, &uri_map, lilv_world.get())
+ , conf(forge)
+ , log(log_feature, uris)
{
- lv2_features = new LV2Features();
lv2_features->add_feature(uri_map.urid_map_feature());
lv2_features->add_feature(uri_map.urid_unmap_feature());
lv2_features->add_feature(std::make_shared<InstanceAccess>());
@@ -107,25 +107,28 @@ public:
lilv_world_load_all(lilv_world.get());
// Set up RDF namespaces
- rdf_world->add_prefix("atom", "http://lv2plug.in/ns/ext/atom#");
- rdf_world->add_prefix("doap", "http://usefulinc.com/ns/doap#");
+ rdf_world->add_prefix("atom", "http://lv2plug.in/ns/ext/atom#");
+ rdf_world->add_prefix("doap", "http://usefulinc.com/ns/doap#");
rdf_world->add_prefix("ingen", INGEN_NS);
- rdf_world->add_prefix("lv2", "http://lv2plug.in/ns/lv2core#");
- 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("lv2", "http://lv2plug.in/ns/lv2core#");
+ 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("patch", "http://lv2plug.in/ns/ext/patch#");
- rdf_world->add_prefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
- rdf_world->add_prefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#");
- rdf_world->add_prefix("xsd", "http://www.w3.org/2001/XMLSchema#");
+ rdf_world->add_prefix("rdf",
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
+ rdf_world->add_prefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#");
+ rdf_world->add_prefix("xsd", "http://www.w3.org/2001/XMLSchema#");
// Load internal 'plugin' information into lilv world
- LilvNode* rdf_type = lilv_new_uri(
- lilv_world.get(), "http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
- LilvNode* ingen_Plugin = lilv_new_uri(
- lilv_world.get(), INGEN__Plugin);
- LilvNodes* internals = lilv_world_find_nodes(
- lilv_world.get(), nullptr, rdf_type, ingen_Plugin);
- LILV_FOREACH(nodes, i, internals) {
+ LilvNode* rdf_type =
+ lilv_new_uri(lilv_world.get(),
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
+ LilvNode* ingen_Plugin = lilv_new_uri(lilv_world.get(), INGEN__Plugin);
+ LilvNodes* internals = lilv_world_find_nodes(lilv_world.get(),
+ nullptr,
+ rdf_type,
+ ingen_Plugin);
+ LILV_FOREACH (nodes, i, internals) {
const LilvNode* internal = lilv_nodes_get(internals, i);
lilv_world_load_resource(lilv_world.get(), internal);
}
@@ -163,24 +166,26 @@ public:
}
Impl(const Impl&) = delete;
- Impl(Impl&&) = delete;
+ Impl(Impl&&) = delete;
Impl& operator=(const Impl&) = delete;
Impl& operator=(Impl&&) = delete;
using Modules = std::map<std::string, Module*>;
Modules modules;
- using InterfaceFactories = std::map<const std::string, World::InterfaceFactory>;
+ using InterfaceFactories =
+ std::map<const std::string, World::InterfaceFactory>;
InterfaceFactories interface_factories;
using ScriptRunner = bool (*)(World& world, const char* filename);
using ScriptRunners = std::map<const std::string, ScriptRunner>;
ScriptRunners script_runners;
- using LilvWorldUPtr = std::unique_ptr<LilvWorld, decltype(&lilv_world_free)>;
+ using LilvWorldUPtr =
+ std::unique_ptr<LilvWorld, decltype(&lilv_world_free)>;
- int* argc;
- char*** argv;
+ int* argc{nullptr};
+ char*** argv{nullptr};
LV2Features* lv2_features;
std::unique_ptr<Sord::World> rdf_world;
LilvWorldUPtr lilv_world;
@@ -199,7 +204,7 @@ public:
};
World::World(LV2_URID_Map* map, LV2_URID_Unmap* unmap, LV2_Log_Log* log)
- : _impl(new Impl(map, unmap, log))
+ : _impl(new Impl(map, unmap, log))
{
_impl->serialiser = std::make_shared<Serialiser>(*this);
_impl->parser = std::make_shared<Parser>();
@@ -246,26 +251,90 @@ World::set_store(const std::shared_ptr<Store>& s)
_impl->store = s;
}
-std::shared_ptr<EngineBase> World::engine() { return _impl->engine; }
-std::shared_ptr<Interface> World::interface() { return _impl->interface; }
-std::shared_ptr<Parser> World::parser() { return _impl->parser; }
-std::shared_ptr<Serialiser> World::serialiser() { return _impl->serialiser; }
-std::shared_ptr<Store> World::store() { return _impl->store; }
+std::shared_ptr<EngineBase>
+World::engine()
+{
+ return _impl->engine;
+}
+std::shared_ptr<Interface>
+World::interface()
+{
+ return _impl->interface;
+}
+std::shared_ptr<Parser>
+World::parser()
+{
+ return _impl->parser;
+}
+std::shared_ptr<Serialiser>
+World::serialiser()
+{
+ return _impl->serialiser;
+}
+std::shared_ptr<Store>
+World::store()
+{
+ return _impl->store;
+}
-int& World::argc() { return *_impl->argc; }
-char**& World::argv() { return *_impl->argv; }
-Configuration& World::conf() { return _impl->conf; }
-Log& World::log() { return _impl->log; }
+int&
+World::argc()
+{
+ return *_impl->argc;
+}
+char**&
+World::argv()
+{
+ return *_impl->argv;
+}
+Configuration&
+World::conf()
+{
+ return _impl->conf;
+}
+Log&
+World::log()
+{
+ return _impl->log;
+}
-std::mutex& World::rdf_mutex() { return _impl->rdf_mutex; }
+std::mutex&
+World::rdf_mutex()
+{
+ return _impl->rdf_mutex;
+}
-Sord::World* World::rdf_world() { return _impl->rdf_world.get(); }
-LilvWorld* World::lilv_world() { return _impl->lilv_world.get(); }
+Sord::World*
+World::rdf_world()
+{
+ return _impl->rdf_world.get();
+}
+LilvWorld*
+World::lilv_world()
+{
+ return _impl->lilv_world.get();
+}
-LV2Features& World::lv2_features() { return *_impl->lv2_features; }
-Forge& World::forge() { return _impl->forge; }
-URIs& World::uris() { return _impl->uris; }
-URIMap& World::uri_map() { return _impl->uri_map; }
+LV2Features&
+World::lv2_features()
+{
+ return *_impl->lv2_features;
+}
+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)
@@ -274,7 +343,7 @@ World::load_module(const char* name)
if (i != _impl->modules.end()) {
return true;
}
- log().info("Loading %1% module\n", name);
+
std::unique_ptr<ingen::Library> lib = ingen_load_library(log(), name);
ingen::Module* (*module_load)() =
@@ -293,7 +362,8 @@ World::load_module(const char* name)
}
log().error("Failed to load module `%1%' (%2%)\n",
- name, lib->get_last_error());
+ name,
+ lib->get_last_error());
return false;
}
@@ -316,8 +386,8 @@ std::shared_ptr<Interface>
World::new_interface(const URI& engine_uri,
const std::shared_ptr<Interface>& respondee)
{
- const Impl::InterfaceFactories::const_iterator i =
- _impl->interface_factories.find(std::string(engine_uri.scheme()));
+ const auto i =
+ _impl->interface_factories.find(std::string{engine_uri.scheme()});
if (i == _impl->interface_factories.end()) {
log().warn("Unknown URI scheme `%1%'\n", engine_uri.scheme());
return nullptr;
@@ -330,7 +400,7 @@ World::new_interface(const URI& engine_uri,
bool
World::run(const std::string& mime_type, const std::string& filename)
{
- const Impl::ScriptRunners::const_iterator i = _impl->script_runners.find(mime_type);
+ const auto i = _impl->script_runners.find(mime_type);
if (i == _impl->script_runners.end()) {
log().warn("Unknown script MIME type `%1%'\n", mime_type);
return false;
@@ -340,7 +410,8 @@ World::run(const std::string& mime_type, const std::string& filename)
}
void
-World::add_interface_factory(const std::string& scheme, InterfaceFactory factory)
+World::add_interface_factory(const std::string& scheme,
+ InterfaceFactory factory)
{
_impl->interface_factories.emplace(scheme, factory);
}