]> ruin.nu Git - germs.git/blobdiff - src/geneorder.cpp
GeneOrder::reverse implemented
[germs.git] / src / geneorder.cpp
index 5915524644e32ee84c76de09ebbcfac6932d3fb1..23bb9623513e1077b9a937e4a8a0ef48993efd1d 100644 (file)
@@ -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);
+}