* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *
***************************************************************************/
-#include "geneorder.h"
+#include <geneorder.h>
+
+#include <algorithm>
+#include <cstdlib>
using namespace std;
_geneorder = go._geneorder;
}
+void GeneOrder::pad(){
+ if (_geneorder[0] != 0)
+ _geneorder.insert(_geneorder.begin(),0);
+ if(_geneorder.back() != static_cast<Gene>(_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<Gene>(_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(){
}