From 9d7c1e971d51561c4bb28fa1064503e5f266908f Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 24 Feb 2015 09:20:22 +0000 Subject: Demodularize Parser and Serialiser. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5606 a436a847-0d15-0410-975c-d299462d15a1 --- ingen/Parser.hpp | 67 ++++++++++++++++++++++++ ingen/Serialiser.hpp | 99 +++++++++++++++++++++++++++++++++++ ingen/World.hpp | 28 ++++------ ingen/serialisation/Parser.hpp | 74 --------------------------- ingen/serialisation/Serialiser.hpp | 102 ------------------------------------- 5 files changed, 176 insertions(+), 194 deletions(-) create mode 100644 ingen/Parser.hpp create mode 100644 ingen/Serialiser.hpp delete mode 100644 ingen/serialisation/Parser.hpp delete mode 100644 ingen/serialisation/Serialiser.hpp (limited to 'ingen') diff --git a/ingen/Parser.hpp b/ingen/Parser.hpp new file mode 100644 index 00000000..b4977c90 --- /dev/null +++ b/ingen/Parser.hpp @@ -0,0 +1,67 @@ +/* + This file is part of Ingen. + Copyright 2007-2012 David Robillard + + 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 . +*/ + +#ifndef INGEN_PARSER_HPP +#define INGEN_PARSER_HPP + +#include +#include + +#include + +#include "ingen/Node.hpp" +#include "raul/Path.hpp" +#include "raul/URI.hpp" + +namespace Ingen { + +class Interface; +class World; + +/** + Read Ingen objects from Turtle files or strings. + + @ingroup Ingen +*/ +class Parser { +public: + explicit Parser() {} + + virtual ~Parser() {} + + typedef Node::Properties Properties; + + virtual bool parse_file( + World* world, + Interface* target, + const std::string& path, + boost::optional parent = boost::optional(), + boost::optional symbol = boost::optional(), + boost::optional data = boost::optional()); + + virtual boost::optional parse_string( + World* world, + Interface* target, + const std::string& str, + const std::string& base_uri, + boost::optional parent = boost::optional(), + boost::optional symbol = boost::optional(), + boost::optional data = boost::optional()); +}; + +} // namespace Ingen + +#endif // INGEN_PARSER_HPP diff --git a/ingen/Serialiser.hpp b/ingen/Serialiser.hpp new file mode 100644 index 00000000..8c82634a --- /dev/null +++ b/ingen/Serialiser.hpp @@ -0,0 +1,99 @@ +/* + This file is part of Ingen. + Copyright 2007-2012 David Robillard + + 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 . +*/ + +#ifndef INGEN_SERIALISER_HPP +#define INGEN_SERIALISER_HPP + +#include +#include + +#include "raul/Path.hpp" + +#include "sord/sordmm.hpp" + +#include "ingen/Node.hpp" + +namespace Ingen { + +class Arc; +class Node; +class Store; +class World; + +/** + Write Ingen objects to Turtle files or strings. + + @ingroup Ingen +*/ +class Serialiser +{ +public: + explicit Serialiser(World& world); + virtual ~Serialiser(); + + /** Write a graph and all its contents as a complete bundle. */ + virtual void write_bundle(SPtr graph, + const std::string& path); + + /** Begin a serialization to a string. + * + * This must be called before any serializing methods. + * + * The results of the serialization will be returned by the finish() method after + * the desired objects have been serialised. + * + * All serialized paths will have the root path chopped from their prefix + * (therefore all serialized paths must be descendants of the root) + */ + virtual void start_to_string(const Raul::Path& root, + const std::string& base_uri); + + /** Begin a serialization to a file. + * + * This must be called before any serializing methods. + * + * All serialized paths will have the root path chopped from their prefix + * (therefore all serialized paths must be descendants of the root) + */ + virtual void start_to_file(const Raul::Path& root, + const std::string& filename); + + /** Serialize an object (graph, block, or port). */ + virtual void serialise(SPtr object) + throw (std::logic_error); + + /** Serialize an arc. */ + virtual void serialise_arc(const Sord::Node& parent, + SPtr arc) + throw (std::logic_error); + + /** Finish serialization. + * + * If this is a file serialization, this must be called to finish and close + * the output file, and the empty string is returned. + * + * If this is a string serialization, the serialized result is returned. + */ + virtual std::string finish(); + +private: + struct Impl; + Impl* me; +}; + +} // namespace Ingen + +#endif // INGEN_SERIALISER_HPP diff --git a/ingen/World.hpp b/ingen/World.hpp index a7c224ac..d803a4a9 100644 --- a/ingen/World.hpp +++ b/ingen/World.hpp @@ -31,18 +31,14 @@ namespace Sord { class World; } namespace Ingen { +class Configuration; class EngineBase; +class Forge; class Interface; +class LV2Features; class Log; - -namespace Serialisation { class Parser; class Serialiser; -} - -class Configuration; -class Forge; -class LV2Features; class Store; class URIMap; class URIs; @@ -53,11 +49,9 @@ class URIs; * contains all necessary shared data (including the world for libraries like * Sord and Lilv) and holds references to components. * - * Most functionality in Ingen is implemented in dynamically loaded modules, + * Some functionality in Ingen is implemented in dynamically loaded modules, * which are loaded using this interface. When loaded, those modules add - * facilities to the World which can then be used throughout the code. For - * example loading the "ingen_serialisation" module will set World::serialiser - * and World::parser to valid objects. + * facilities to the World which can then be used throughout the code. * * The world is used in any process which uses the Ingen as a library, both * client and server (e.g. the world may not actually contain an Engine, since @@ -116,15 +110,13 @@ public: virtual void set_engine(SPtr e); virtual void set_interface(SPtr e); - virtual void set_parser(SPtr p); - virtual void set_serialiser(SPtr s); virtual void set_store(SPtr s); - virtual SPtr engine(); - virtual SPtr interface(); - virtual SPtr parser(); - virtual SPtr serialiser(); - virtual SPtr store(); + virtual SPtr engine(); + virtual SPtr interface(); + virtual SPtr parser(); + virtual SPtr serialiser(); + virtual SPtr store(); virtual int& argc(); virtual char**& argv(); diff --git a/ingen/serialisation/Parser.hpp b/ingen/serialisation/Parser.hpp deleted file mode 100644 index 446b3988..00000000 --- a/ingen/serialisation/Parser.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - This file is part of Ingen. - Copyright 2007-2012 David Robillard - - 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 . -*/ - -/** - @defgroup IngenSerialisation Turtle Serialisation -*/ - -#ifndef INGEN_SERIALISATION_PARSER_HPP -#define INGEN_SERIALISATION_PARSER_HPP - -#include -#include - -#include - -#include "ingen/Node.hpp" -#include "raul/Path.hpp" -#include "raul/URI.hpp" - -namespace Ingen { - -class Interface; -class World; - -namespace Serialisation { - -/** - Read Ingen objects from Turtle files or strings. - - @ingroup IngenSerialisation -*/ -class Parser { -public: - explicit Parser() {} - - virtual ~Parser() {} - - typedef Node::Properties Properties; - - virtual bool parse_file( - World* world, - Interface* target, - const std::string& path, - boost::optional parent = boost::optional(), - boost::optional symbol = boost::optional(), - boost::optional data = boost::optional()); - - virtual boost::optional parse_string( - World* world, - Interface* target, - const std::string& str, - const std::string& base_uri, - boost::optional parent = boost::optional(), - boost::optional symbol = boost::optional(), - boost::optional data = boost::optional()); -}; - -} // namespace Serialisation -} // namespace Ingen - -#endif // INGEN_SERIALISATION_PARSER_HPP diff --git a/ingen/serialisation/Serialiser.hpp b/ingen/serialisation/Serialiser.hpp deleted file mode 100644 index 80a01b89..00000000 --- a/ingen/serialisation/Serialiser.hpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - This file is part of Ingen. - Copyright 2007-2012 David Robillard - - 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 . -*/ - -#ifndef INGEN_SERIALISATION_SERIALISER_HPP -#define INGEN_SERIALISATION_SERIALISER_HPP - -#include -#include - -#include "raul/Path.hpp" - -#include "sord/sordmm.hpp" - -#include "ingen/Node.hpp" - -namespace Ingen { - -class Arc; -class Node; -class Store; -class World; - -namespace Serialisation { - -/** - Write Ingen objects to Turtle files or strings. - - @ingroup IngenSerialisation -*/ -class Serialiser -{ -public: - explicit Serialiser(World& world); - virtual ~Serialiser(); - - /** Write a graph and all its contents as a complete bundle. */ - virtual void write_bundle(SPtr graph, - const std::string& path); - - /** Begin a serialization to a string. - * - * This must be called before any serializing methods. - * - * The results of the serialization will be returned by the finish() method after - * the desired objects have been serialised. - * - * All serialized paths will have the root path chopped from their prefix - * (therefore all serialized paths must be descendants of the root) - */ - virtual void start_to_string(const Raul::Path& root, - const std::string& base_uri); - - /** Begin a serialization to a file. - * - * This must be called before any serializing methods. - * - * All serialized paths will have the root path chopped from their prefix - * (therefore all serialized paths must be descendants of the root) - */ - virtual void start_to_file(const Raul::Path& root, - const std::string& filename); - - /** Serialize an object (graph, block, or port). */ - virtual void serialise(SPtr object) - throw (std::logic_error); - - /** Serialize an arc. */ - virtual void serialise_arc(const Sord::Node& parent, - SPtr arc) - throw (std::logic_error); - - /** Finish serialization. - * - * If this is a file serialization, this must be called to finish and close - * the output file, and the empty string is returned. - * - * If this is a string serialization, the serialized result is returned. - */ - virtual std::string finish(); - -private: - struct Impl; - Impl* me; -}; - -} // namespace Serialisation -} // namespace Ingen - -#endif // INGEN_SERIALISATION_SERIALISER_HPP -- cgit v1.2.1