diff options
Diffstat (limited to 'src/engine')
-rw-r--r-- | src/engine/Action.cpp | 4 | ||||
-rw-r--r-- | src/engine/Edge.cpp | 5 | ||||
-rw-r--r-- | src/engine/Machine.cpp | 39 | ||||
-rw-r--r-- | src/engine/Node.cpp | 5 | ||||
-rw-r--r-- | src/engine/machina/Loader.hpp | 4 | ||||
-rw-r--r-- | src/engine/machina/Machine.hpp | 17 | ||||
-rw-r--r-- | src/engine/machina/Makefile.am | 23 |
7 files changed, 68 insertions, 29 deletions
diff --git a/src/engine/Action.cpp b/src/engine/Action.cpp index 7be3687..bb7adaf 100644 --- a/src/engine/Action.cpp +++ b/src/engine/Action.cpp @@ -15,8 +15,8 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include <raul/RDFWorld.hpp> -#include <raul/RDFModel.hpp> +#include <redlandmm/World.hpp> +#include <redlandmm/Model.hpp> #include "machina/Action.hpp" namespace Machina { diff --git a/src/engine/Edge.cpp b/src/engine/Edge.cpp index 08e45c0..511d38e 100644 --- a/src/engine/Edge.cpp +++ b/src/engine/Edge.cpp @@ -15,8 +15,9 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include <raul/RDFWorld.hpp> -#include <raul/RDFModel.hpp> +#include <raul/Atom.hpp> +#include <redlandmm/World.hpp> +#include <redlandmm/Model.hpp> #include "machina/Node.hpp" #include "machina/Edge.hpp" diff --git a/src/engine/Machine.cpp b/src/engine/Machine.cpp index 7f668ef..9bb88a5 100644 --- a/src/engine/Machine.cpp +++ b/src/engine/Machine.cpp @@ -16,13 +16,14 @@ */ #include <cstdlib> -#include <raul/RDFWorld.hpp> -#include <raul/RDFModel.hpp> #include <raul/SharedPtr.hpp> -#include "machina/Machine.hpp" -#include "machina/Node.hpp" +#include <redlandmm/Model.hpp> +#include <redlandmm/World.hpp> #include "machina/Edge.hpp" +#include "machina/Gene.hpp" +#include "machina/Machine.hpp" #include "machina/MidiAction.hpp" +#include "machina/Node.hpp" using namespace std; using namespace Raul; @@ -37,10 +38,40 @@ Machine::Machine() { } + +Machine::Machine(SharedPtr<Gene> genotype) + : _is_activated(false) + , _is_finished(false) + , _time(0) + , _genotype(genotype) +{ +} + Machine::~Machine() { } + + +SharedPtr<Gene> +Machine::genotype() +{ + if (_genotype) + return _genotype; + + _genotype = SharedPtr<Gene>(new Gene(_nodes.size())); + + size_t node_id = 0; + for (Nodes::iterator n = _nodes.begin(); n != _nodes.end(); ++n, ++node_id) { + size_t edge_id = 0; + for (Node::Edges::iterator e = (*n)->outgoing_edges().begin(); + e != (*n)->outgoing_edges().end(); ++e, ++edge_id) { + (*_genotype.get())[node_id].push_back(edge_id); + } + } + + return _genotype; +} /** Set the MIDI sink to be used for executing MIDI actions. diff --git a/src/engine/Node.cpp b/src/engine/Node.cpp index 77c6d00..5a1ca85 100644 --- a/src/engine/Node.cpp +++ b/src/engine/Node.cpp @@ -16,8 +16,9 @@ */ #include <cassert> -#include <raul/RDFWorld.hpp> -#include <raul/RDFModel.hpp> +#include <raul/Atom.hpp> +#include <redlandmm/World.hpp> +#include <redlandmm/Model.hpp> #include <machina/Node.hpp> #include <machina/Edge.hpp> diff --git a/src/engine/machina/Loader.hpp b/src/engine/machina/Loader.hpp index 914df24..4a3c123 100644 --- a/src/engine/machina/Loader.hpp +++ b/src/engine/machina/Loader.hpp @@ -21,9 +21,9 @@ #include <glibmm/ustring.h> #include <raul/SharedPtr.hpp> #include <raul/Path.hpp> -#include <raul/RDFWorld.hpp> +#include <redlandmm/World.hpp> -using Raul::Namespaces; +using Redland::Namespaces; namespace Machina { diff --git a/src/engine/machina/Machine.hpp b/src/engine/machina/Machine.hpp index c63537d..76ccef1 100644 --- a/src/engine/machina/Machine.hpp +++ b/src/engine/machina/Machine.hpp @@ -21,19 +21,28 @@ #include <boost/utility.hpp> #include <raul/SharedPtr.hpp> #include <raul/List.hpp> -#include <raul/RDFModel.hpp> #include <raul/TimeSlice.hpp> +#include <redlandmm/Model.hpp> #include "types.hpp" #include "LearnRequest.hpp" #include "Node.hpp" namespace Machina { +class Gene; + +/** A (Finite State) Machine. + * + * In evolutionary terms, this is the phenotype of Gene. + */ class Machine : public Raul::Stateful, public boost::noncopyable { public: Machine(); + Machine(SharedPtr<Gene> genotype); ~Machine(); + + SharedPtr<Gene> genotype(); // Main context void activate() { _is_activated = true; } @@ -74,13 +83,13 @@ private: static const size_t MAX_ACTIVE_NODES = 128; SharedPtr<Node> _active_nodes[MAX_ACTIVE_NODES]; - WeakPtr<Raul::MIDISink> _sink; bool _is_activated; bool _is_finished; Raul::BeatTime _time; - Nodes _nodes; - + SharedPtr<Gene> _genotype; SharedPtr<LearnRequest> _pending_learn; + WeakPtr<Raul::MIDISink> _sink; + Nodes _nodes; }; diff --git a/src/engine/machina/Makefile.am b/src/engine/machina/Makefile.am index 4a97f3e..e7c5a56 100644 --- a/src/engine/machina/Makefile.am +++ b/src/engine/machina/Makefile.am @@ -1,22 +1,19 @@ libmachinaincludedir = $(includedir)/machina libmachinainclude_HEADERS = \ - types.hpp \ Action.hpp \ - Node.hpp \ - Edge.hpp \ - Machine.hpp \ - Loader.hpp \ - MidiAction.hpp \ ActionFactory.hpp \ Driver.hpp \ - LearnRequest.hpp \ + Edge.hpp \ Engine.hpp \ - Recorder.hpp \ + Gene.hpp \ + JackDriver.hpp \ + LearnRequest.hpp \ + Loader.hpp \ + Machine.hpp \ MachineBuilder.hpp \ + MidiAction.hpp \ + Node.hpp \ + Recorder.hpp \ SMFDriver.hpp \ - JackDriver.hpp - -if WITH_JACK - JackDriver.hpp -endif + types.hpp |