X-Git-Url: https://ruin.nu/git/?p=germs.git;a=blobdiff_plain;f=src%2Fgeneorder.cpp;h=23bb9623513e1077b9a937e4a8a0ef48993efd1d;hp=5915524644e32ee84c76de09ebbcfac6932d3fb1;hb=959f25585c048a9cda1653ef4c5ea2c1a7007b67;hpb=c0c87c4e18985ba969174716f7576f291b0fd6a6 diff --git a/src/geneorder.cpp b/src/geneorder.cpp index 5915524..23bb962 100644 --- a/src/geneorder.cpp +++ b/src/geneorder.cpp @@ -97,3 +97,23 @@ GeneOrder::iterator GeneOrder::begin() const{ GeneOrder::iterator GeneOrder::end() const{ return _geneorder.end(); } + +struct Sign{ + Gene operator()(Gene x) const{ + return x*-1; + } +}; + +void GeneOrder::reverse(size_type i, size_type j){ + if (i > j) + throw out_of_range("i can't be bigger than j"); + if (i < 0) + throw out_of_range("Index i is not in valid range"); + if (j >= _geneorder.size()) + throw out_of_range("Index j is not in valid range"); + GeneList::iterator begin = _geneorder.begin()+i; + GeneList::iterator end = _geneorder.begin()+j+1; + + transform(begin,end,begin,Sign()); + std::reverse(begin,end); +}