]> ruin.nu Git - germs.git/blobdiff - src/reverseaction.h
give access to reverse action members, and calculate symmetric score according to...
[germs.git] / src / reverseaction.h
index 0d8ac91999e02d3f5bf2b3d1058854e3dcb76fb9..e0857803518b2d4aa5acaa72f0c7cfe89f41bf4f 100644 (file)
 #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
@@ -43,13 +55,31 @@ class ReverseAction : public SortAction{
                        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;