summaryrefslogtreecommitdiffstats
path: root/src/Serialiser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Serialiser.cpp')
-rw-r--r--src/Serialiser.cpp64
1 files changed, 37 insertions, 27 deletions
diff --git a/src/Serialiser.cpp b/src/Serialiser.cpp
index 518f0bea..70a1d286 100644
--- a/src/Serialiser.cpp
+++ b/src/Serialiser.cpp
@@ -75,7 +75,7 @@ struct Serialiser::Impl {
const Sord::Node& class_id,
const Sord::Node& id);
- void serialise_port(const Node* p,
+ void serialise_port(SPtr<const Node> p,
Resource::Graph context,
const Sord::Node& id);
@@ -311,7 +311,7 @@ Serialiser::serialise(SPtr<const Node> object) throw (std::logic_error)
me->serialise_block(object, plugin_id, me->path_rdf_node(object->path()));
} else if (object->has_property(uris.rdf_type, uris.lv2_InputPort) ||
object->has_property(uris.rdf_type, uris.lv2_OutputPort)) {
- me->serialise_port(object.get(),
+ me->serialise_port(object,
Resource::Graph::DEFAULT,
me->path_rdf_node(object->path()));
} else {
@@ -362,7 +362,7 @@ Serialiser::Impl::serialise_graph(SPtr<const Node> graph,
continue;
if (n->second->has_property(uris.rdf_type, uris.ingen_Graph)) {
- SPtr<Node> subgraph = n->second;
+ const SPtr<const Node> subgraph = n->second;
SerdURI base_uri;
serd_uri_parse((const uint8_t*)_base_uri.c_str(), &base_uri);
@@ -395,7 +395,7 @@ Serialiser::Impl::serialise_graph(SPtr<const Node> graph,
block_id);
serialise_block(subgraph, subgraph_id, block_id);
} else if (n->second->has_property(uris.rdf_type, uris.ingen_Block)) {
- SPtr<const Node> block = n->second;
+ const SPtr<const Node> block = n->second;
const Sord::URI class_id(world, block->plugin()->uri());
const Sord::Node block_id(path_rdf_node(n->second->path()));
@@ -405,23 +405,26 @@ Serialiser::Impl::serialise_graph(SPtr<const Node> graph,
serialise_block(block, class_id, block_id);
plugins.insert(block->plugin());
- }
- }
-
- for (uint32_t i = 0; i < graph->num_ports(); ++i) {
- Node* p = graph->port(i);
- const Sord::Node port_id = path_rdf_node(p->path());
+ } else if (n->second->has_property(uris.rdf_type, uris.lv2_InputPort) ||
+ n->second->has_property(uris.rdf_type, uris.lv2_OutputPort)) {
+ const SPtr<const Node> p = n->second;
- // Ensure lv2:name always exists so Graph is a valid LV2 plugin
- if (p->properties().find(uris.lv2_name) == p->properties().end())
- p->set_property(uris.lv2_name,
- _world.forge().alloc(p->symbol().c_str()));
+ // Ensure lv2:name always exists so Graph is a valid LV2 plugin
+ const Sord::Node port_id(path_rdf_node(p->path()));
+ if (p->properties().find(uris.lv2_name) == p->properties().end())
+ _model->add_statement(port_id,
+ Sord::URI(world, uris.lv2_name),
+ Sord::Literal(world, p->symbol()));
- _model->add_statement(graph_id,
- Sord::URI(world, LV2_CORE__port),
- port_id);
- serialise_port(p, Resource::Graph::DEFAULT, port_id);
- serialise_port(p, Resource::Graph::INTERNAL, port_id);
+ _model->add_statement(graph_id,
+ Sord::URI(world, LV2_CORE__port),
+ port_id);
+ serialise_port(p, Resource::Graph::DEFAULT, port_id);
+ serialise_port(p, Resource::Graph::INTERNAL, port_id);
+ } else {
+ _world.log().warn(fmt("<%1%> has no known type\n")
+ % n->second->uri());
+ }
}
for (const auto& a : graph->arcs()) {
@@ -462,18 +465,25 @@ Serialiser::Impl::serialise_block(SPtr<const Node> block,
}
}
- for (uint32_t i = 0; i < block->num_ports(); ++i) {
- Node* const p = block->port(i);
- const Sord::Node port_id = path_rdf_node(p->path());
- serialise_port(p, Resource::Graph::DEFAULT, port_id);
- _model->add_statement(block_id,
- Sord::URI(_model->world(), uris.lv2_port),
- port_id);
+ const Store::const_range kids = _world.store()->children_range(block);
+ for (Store::const_iterator n = kids.first; n != kids.second; ++n) {
+ if (n->first.parent() != block->path())
+ continue;
+
+ if (n->second->has_property(uris.rdf_type, uris.lv2_InputPort) ||
+ n->second->has_property(uris.rdf_type, uris.lv2_InputPort)) {
+ const SPtr<const Node> p = n->second;
+ const Sord::Node port_id = path_rdf_node(p->path());
+ serialise_port(p, Resource::Graph::DEFAULT, port_id);
+ _model->add_statement(block_id,
+ Sord::URI(_model->world(), uris.lv2_port),
+ port_id);
+ }
}
}
void
-Serialiser::Impl::serialise_port(const Node* port,
+Serialiser::Impl::serialise_port(SPtr<const Node> port,
Resource::Graph context,
const Sord::Node& port_id)
{