X-Git-Url: https://ruin.nu/git/%241?a=blobdiff_plain;f=src%2Fgeneorder.cpp;h=994137d288a025e788eaf99d2b79b4272bc7d96a;hb=61d4b0437c63ecc3452e8b59746d629a4387543f;hp=31461a1d366abb015cb3815e4376b74a8e77a2b1;hpb=ac2b936d719954bf180763f5b77caae79ce8b2c6;p=germs.git diff --git a/src/geneorder.cpp b/src/geneorder.cpp index 31461a1..994137d 100644 --- a/src/geneorder.cpp +++ b/src/geneorder.cpp @@ -18,7 +18,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * ***************************************************************************/ -#include "geneorder.h" +#include + +#include +#include using namespace std; @@ -35,6 +38,31 @@ GeneOrder::GeneOrder(const GeneOrder& go){ _geneorder = go._geneorder; } +void GeneOrder::pad(){ + if (_geneorder[0] != 0) + _geneorder.insert(_geneorder.begin(),0); + if(_geneorder.back() != static_cast(_geneorder.size() - 1)) + _geneorder.push_back(_geneorder.size()); +} + +struct test{ + Gene operator()(Gene x) const{ + return abs(x); + } +}; + +void GeneOrder::verify(){ + if(_geneorder[0] != 0) + throw std::invalid_argument("Permutation doesn't start with 0"); + if ( _geneorder.back() != static_cast(_geneorder.size() - 1)) + throw std::invalid_argument("Permutation doesn't end with n+1"); + GeneList genes(_geneorder); + transform(genes.begin(),genes.end(),genes.begin(),test()); + sort(genes.begin(),genes.end()); + if (unique(genes.begin(),genes.end()) != genes.end()) + throw std::invalid_argument("Not all genes are present exactly 1 time"); +} + GeneOrder::~GeneOrder(){ }