]> ruin.nu Git - germs.git/blobdiff - src/geneorder.cpp
some cleanup, documentation, begin() and end() methods
[germs.git] / src / geneorder.cpp
index 994137d288a025e788eaf99d2b79b4272bc7d96a..5915524644e32ee84c76de09ebbcfac6932d3fb1 100644 (file)
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
  ***************************************************************************/
 
-#include <geneorder.h>
-
 #include <algorithm>
+#include <stdexcept>
 #include <cstdlib>
-
 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<Gene>(_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();
+}