aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/Action.cpp4
-rw-r--r--src/engine/Edge.cpp5
-rw-r--r--src/engine/Machine.cpp39
-rw-r--r--src/engine/Node.cpp5
-rw-r--r--src/engine/machina/Loader.hpp4
-rw-r--r--src/engine/machina/Machine.hpp17
-rw-r--r--src/engine/machina/Makefile.am23
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