#define __REVERSEACTION_H__
#include "sortaction.h"
+#include "genealgorithms.h"
+#include "geneorder.h"
+
+#include <algorithm>
+#include <sstream>
+
/**
* Reverses an interval
*
* \author Michael Andreen
*/
-class ReverseAction : public SortAction{
+class ReverseAction : public SortActionImpl{
public:
/**
* Creates a new reverse action for the interval [i,j]
*/
- ReverseAction(size_t i, size_t j):_i(i),_j(j){}
+ ReverseAction(size_t i, size_t j): _i(i),_j(j){
+ }
+
+ ReverseAction(Interval i){
+ _i = std::min(i.first,i.second);
+ _j = std::max(i.first,i.second)-1;
+ }
/**
* Applies the sort action on the gene order
return go;
}
- virtual bool operator==(const SortAction& sa) const{
+ virtual bool operator==(const SortActionImpl& sa) const{
if (const ReverseAction* psa = dynamic_cast<const ReverseAction*>(&sa)){
if (_i == psa->_i && _j == psa->_j)
return true;
}
return false;
}
+
+ /**
+ * Gives a string representation of the action, for output
+ */
+ virtual std::string toString() const{
+ std::ostringstream os;
+ os << "[" << _i << "," << _j << "]";
+ return os.str();
+ }
+
+ size_t i() const{
+ return _i;
+ }
+ size_t j() const{
+ return _j;
+ }
+
+
private:
size_t _i;
size_t _j;