From d5eb49e1e468377fea4c5f13840d0435714d34c4 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 26 Mar 2017 18:15:16 +0200 Subject: Remove Node port accessors --- src/Serialiser.cpp | 64 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 27 deletions(-) (limited to 'src/Serialiser.cpp') 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 p, Resource::Graph context, const Sord::Node& id); @@ -311,7 +311,7 @@ Serialiser::serialise(SPtr 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 graph, continue; if (n->second->has_property(uris.rdf_type, uris.ingen_Graph)) { - SPtr subgraph = n->second; + const SPtr 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 graph, block_id); serialise_block(subgraph, subgraph_id, block_id); } else if (n->second->has_property(uris.rdf_type, uris.ingen_Block)) { - SPtr block = n->second; + const SPtr 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 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 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 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 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 port, Resource::Graph context, const Sord::Node& port_id) { -- cgit v1.2.1