X-Git-Url: https://ruin.nu/git/%3CTMPL_VAR%20NAME=PAGE%3E?a=blobdiff_plain;f=src%2Fgeneorder.cpp;h=5915524644e32ee84c76de09ebbcfac6932d3fb1;hb=c0c87c4e18985ba969174716f7576f291b0fd6a6;hp=994137d288a025e788eaf99d2b79b4272bc7d96a;hpb=ca91837dd89a8f31174d83760ec37839c1c2a06f;p=germs.git diff --git a/src/geneorder.cpp b/src/geneorder.cpp index 994137d..5915524 100644 --- a/src/geneorder.cpp +++ b/src/geneorder.cpp @@ -18,13 +18,13 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * ***************************************************************************/ -#include - #include +#include #include - using namespace std; +#include "geneorder.h" + /** * \file GeneOrder.cpp * Implements the GeneOrder class @@ -33,7 +33,6 @@ using namespace std; */ - GeneOrder::GeneOrder(const GeneOrder& go){ _geneorder = go._geneorder; } @@ -45,7 +44,7 @@ void GeneOrder::pad(){ _geneorder.push_back(_geneorder.size()); } -struct test{ +struct Abs{ Gene operator()(Gene x) const{ return abs(x); } @@ -53,11 +52,12 @@ struct test{ void GeneOrder::verify(){ if(_geneorder[0] != 0) - throw std::invalid_argument("Permutation doesn't start with 0"); + throw 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"); + throw invalid_argument("Permutation doesn't end with n+1"); + GeneList genes(_geneorder); - transform(genes.begin(),genes.end(),genes.begin(),test()); + transform(genes.begin(),genes.end(),genes.begin(),Abs()); 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"); @@ -77,14 +77,23 @@ const GeneOrder& GeneOrder::operator=(const GeneOrder& go){ */ const Gene& GeneOrder::operator[](size_type i) const{ if (i < 0 || i >= _geneorder.size()) - throw out_of_range("Index is not in valid range"); + throw out_of_range("Indexis not in valid range"); return _geneorder[i]; } -int GeneOrder::size() const{ +GeneOrder::size_type GeneOrder::size() const{ return _geneorder.size(); } const GeneOrder::GeneList& GeneOrder::list() const{ return _geneorder; } + + +GeneOrder::iterator GeneOrder::begin() const{ + return _geneorder.begin(); +} + +GeneOrder::iterator GeneOrder::end() const{ + return _geneorder.end(); +}