From e19c643153b32983cfeb319356dbbc2f7798c4b7 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 6 Dec 2007 00:02:08 +0000 Subject: Rename uselessley verbose MachineMutation.[ch]pp git-svn-id: http://svn.drobilla.net/lad/machina@953 a436a847-0d15-0410-975c-d299462d15a1 --- src/engine/MachineMutation.cpp | 120 --------------------------------- src/engine/Makefile.am | 2 +- src/engine/Mutation.cpp | 120 +++++++++++++++++++++++++++++++++ src/engine/machina/MachineMutation.hpp | 41 ----------- src/engine/machina/Makefile.am | 2 +- src/engine/machina/Mutation.hpp | 41 +++++++++++ 6 files changed, 163 insertions(+), 163 deletions(-) delete mode 100644 src/engine/MachineMutation.cpp create mode 100644 src/engine/Mutation.cpp delete mode 100644 src/engine/machina/MachineMutation.hpp create mode 100644 src/engine/machina/Mutation.hpp (limited to 'src/engine') diff --git a/src/engine/MachineMutation.cpp b/src/engine/MachineMutation.cpp deleted file mode 100644 index 3c899bc..0000000 --- a/src/engine/MachineMutation.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* This file is part of Machina. - * Copyright (C) 2007 Dave Robillard - * - * Machina is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any later - * version. - * - * Machina 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 General Public License for details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include -#include -#include "machina/Edge.hpp" -#include "machina/Machine.hpp" -#include "machina/MachineMutation.hpp" -#include "machina/ActionFactory.hpp" - -using namespace std; - -namespace Machina { -namespace Mutation { - - -void -Compress::mutate(Machine& machine) -{ - // Trim disconnected nodes - for (Machine::Nodes::iterator i = machine.nodes().begin(); i != machine.nodes().end() ;) { - Machine::Nodes::iterator next = i; - ++next; - - if ((*i)->edges().empty()) - machine.remove_node(*i); - - i = next; - } -} - - -void -AddNode::mutate(Machine& machine) -{ - // Create random node - SharedPtr node(new Node(1.0)); - uint8_t note = rand() % 128; - node->set_enter_action(ActionFactory::note_on(note)); - node->set_exit_action(ActionFactory::note_off(note)); - machine.add_node(node); - - // Add as a successor to some other random node - SharedPtr tail = machine.random_node(); - if (tail && tail != node) - tail->add_edge(boost::shared_ptr(new Edge(tail, node))); -} - - -void -RemoveNode::mutate(Machine& machine) -{ - SharedPtr node = machine.random_node(); - machine.remove_node(node); -} - - -void -AdjustNode::mutate(Machine& machine) -{ - SharedPtr node = machine.random_node(); - if (node) { - SharedPtr enter_action = PtrCast(node->enter_action()); - SharedPtr exit_action = PtrCast(node->exit_action()); - if (enter_action && exit_action) { - const uint8_t note = rand() % 128; - enter_action->event()[1] = note; - exit_action->event()[1] = note; - } - node->set_changed(); - } -} - - -void -AddEdge::mutate(Machine& machine) -{ - SharedPtr tail = machine.random_node(); - SharedPtr head = machine.random_node(); - - if (tail && head && tail != head && !tail->connected_to(head)) - tail->add_edge(boost::shared_ptr(new Edge(tail, head))); -} - - -void -RemoveEdge::mutate(Machine& machine) -{ - SharedPtr tail = machine.random_node(); - if (tail) - tail->remove_edge(tail->random_edge()); -} - - -void -AdjustEdge::mutate(Machine& machine) -{ - SharedPtr edge = machine.random_edge(); - if (edge) - edge->set_probability(rand() / (float)RAND_MAX); -} - - -} // namespace Mutation -} // namespace Machina - diff --git a/src/engine/Makefile.am b/src/engine/Makefile.am index 010affa..20f02e9 100644 --- a/src/engine/Makefile.am +++ b/src/engine/Makefile.am @@ -10,7 +10,7 @@ libmachina_la_SOURCES = \ Edge.cpp \ Action.cpp \ Machine.cpp \ - MachineMutation.cpp \ + Mutation.cpp \ Loader.cpp \ MidiAction.cpp \ ActionFactory.cpp \ diff --git a/src/engine/Mutation.cpp b/src/engine/Mutation.cpp new file mode 100644 index 0000000..c861810 --- /dev/null +++ b/src/engine/Mutation.cpp @@ -0,0 +1,120 @@ +/* This file is part of Machina. + * Copyright (C) 2007 Dave Robillard + * + * Machina is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * Machina 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 General Public License for details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include "machina/Edge.hpp" +#include "machina/Machine.hpp" +#include "machina/Mutation.hpp" +#include "machina/ActionFactory.hpp" + +using namespace std; + +namespace Machina { +namespace Mutation { + + +void +Compress::mutate(Machine& machine) +{ + // Trim disconnected nodes + for (Machine::Nodes::iterator i = machine.nodes().begin(); i != machine.nodes().end() ;) { + Machine::Nodes::iterator next = i; + ++next; + + if ((*i)->edges().empty()) + machine.remove_node(*i); + + i = next; + } +} + + +void +AddNode::mutate(Machine& machine) +{ + // Create random node + SharedPtr node(new Node(1.0)); + uint8_t note = rand() % 128; + node->set_enter_action(ActionFactory::note_on(note)); + node->set_exit_action(ActionFactory::note_off(note)); + machine.add_node(node); + + // Add as a successor to some other random node + SharedPtr tail = machine.random_node(); + if (tail && tail != node) + tail->add_edge(boost::shared_ptr(new Edge(tail, node))); +} + + +void +RemoveNode::mutate(Machine& machine) +{ + SharedPtr node = machine.random_node(); + machine.remove_node(node); +} + + +void +AdjustNode::mutate(Machine& machine) +{ + SharedPtr node = machine.random_node(); + if (node) { + SharedPtr enter_action = PtrCast(node->enter_action()); + SharedPtr exit_action = PtrCast(node->exit_action()); + if (enter_action && exit_action) { + const uint8_t note = rand() % 128; + enter_action->event()[1] = note; + exit_action->event()[1] = note; + } + node->set_changed(); + } +} + + +void +AddEdge::mutate(Machine& machine) +{ + SharedPtr tail = machine.random_node(); + SharedPtr head = machine.random_node(); + + if (tail && head && tail != head && !tail->connected_to(head)) + tail->add_edge(boost::shared_ptr(new Edge(tail, head))); +} + + +void +RemoveEdge::mutate(Machine& machine) +{ + SharedPtr tail = machine.random_node(); + if (tail) + tail->remove_edge(tail->random_edge()); +} + + +void +AdjustEdge::mutate(Machine& machine) +{ + SharedPtr edge = machine.random_edge(); + if (edge) + edge->set_probability(rand() / (float)RAND_MAX); +} + + +} // namespace Mutation +} // namespace Machina + diff --git a/src/engine/machina/MachineMutation.hpp b/src/engine/machina/MachineMutation.hpp deleted file mode 100644 index 0a9731c..0000000 --- a/src/engine/machina/MachineMutation.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/* This file is part of Machina. - * Copyright (C) 2007 Dave Robillard - * - * Machina is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any later - * version. - * - * Machina 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 General Public License for details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef MACHINA_MACHINE_MUTATION_HPP -#define MACHINA_MACHINE_MUTATION_HPP - -namespace Machina { - -class Machine; - -namespace Mutation { - -struct Mutation { virtual void mutate(Machine& machine) = 0; }; - -struct Compress { static void mutate(Machine& machine); }; -struct AddNode { static void mutate(Machine& machine); }; -struct RemoveNode { static void mutate(Machine& machine); }; -struct AdjustNode { static void mutate(Machine& machine); }; -struct AddEdge { static void mutate(Machine& machine); }; -struct RemoveEdge { static void mutate(Machine& machine); }; -struct AdjustEdge { static void mutate(Machine& machine); }; - -} // namespace Mutation - -} // namespace Machina - -#endif // MACHINA_MACHINE_MUTATION_HPP diff --git a/src/engine/machina/Makefile.am b/src/engine/machina/Makefile.am index de99845..f8666e1 100644 --- a/src/engine/machina/Makefile.am +++ b/src/engine/machina/Makefile.am @@ -11,8 +11,8 @@ libmachinainclude_HEADERS = \ Loader.hpp \ Machine.hpp \ MachineBuilder.hpp \ - MachineMutation.hpp \ MidiAction.hpp \ + Mutation.hpp \ Node.hpp \ Recorder.hpp \ SMFDriver.hpp \ diff --git a/src/engine/machina/Mutation.hpp b/src/engine/machina/Mutation.hpp new file mode 100644 index 0000000..0a9731c --- /dev/null +++ b/src/engine/machina/Mutation.hpp @@ -0,0 +1,41 @@ +/* This file is part of Machina. + * Copyright (C) 2007 Dave Robillard + * + * Machina is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * Machina 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 General Public License for details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef MACHINA_MACHINE_MUTATION_HPP +#define MACHINA_MACHINE_MUTATION_HPP + +namespace Machina { + +class Machine; + +namespace Mutation { + +struct Mutation { virtual void mutate(Machine& machine) = 0; }; + +struct Compress { static void mutate(Machine& machine); }; +struct AddNode { static void mutate(Machine& machine); }; +struct RemoveNode { static void mutate(Machine& machine); }; +struct AdjustNode { static void mutate(Machine& machine); }; +struct AddEdge { static void mutate(Machine& machine); }; +struct RemoveEdge { static void mutate(Machine& machine); }; +struct AdjustEdge { static void mutate(Machine& machine); }; + +} // namespace Mutation + +} // namespace Machina + +#endif // MACHINA_MACHINE_MUTATION_HPP -- cgit v1.2.1