]> ruin.nu Git - germs.git/blobdiff - src/sortaction.h
toString for actions
[germs.git] / src / sortaction.h
index b6c5df74278f85d08540678674ffb6c7d384a650..66c337ca625cac468b113debc86c1cd224029a76 100644 (file)
 #ifndef __SORTACTION_H__
 #define __SORTACTION_H__
 
+#include <tr1/memory>
+#include <string>
+class GeneOrder;
 /**
- * Abstraction of a sort action, keeping track of score
+ * Abstraction of a sort action, all child actions has to be immutable.
  *
  * \author Michael Andreen
  */
 class SortAction{
        public:
+               typedef std::tr1::shared_ptr<SortAction> ActionPointer;
 
+               /**
+                * Creates a new sort action, given a specified action.
+                * SortAction promises to remove the given action.
+                */
+               SortAction(SortAction* sa): _action(sa){
+               }
+
+               SortAction(const SortAction& sa): _action(sa._action){
+               }
+
+               virtual const SortAction& operator=(const SortAction& sa){
+                       if (this != &sa)
+                               _action = sa._action;
+                       return *this;
+               }
+               
                virtual ~SortAction(){};
 
                /**
-                * Sort SortActions by score
+                * Applies the action on the GeneOrder and returning it.
+                */
+               virtual GeneOrder& operator()(GeneOrder& go) const{
+                       return (*_action)(go);
+               }
+
+               /**
+                * Compares sort actions.
                 */
-               virtual operator<(const SortAction& sa) const;
+               virtual bool operator==(const SortAction& sa) const{
+                       return (*_action) == (sa._action.get() == 0 ? sa : *sa._action);
+               }
+               
+               /**
+                * Gives a string representation of the action, for output
+                */
+               virtual std::string toString() const{
+                       return _action->toString();
+               }
+       private:
+               ActionPointer _action;
+
 };
 
 #endif