]> ruin.nu Git - germs.git/blobdiff - src/sortaction.h
better if SortAction takes care of the shared_ptr, makes other code easier
[germs.git] / src / sortaction.h
index a71a533cf70ec981f10d32527053e58cdf0a609b..d1a3f7bca68e3fe5a11c94631f117123c10295fe 100644 (file)
 #ifndef __SORTACTION_H__
 #define __SORTACTION_H__
 
+#include <tr1/memory>
 class GeneOrder;
 /**
- * Abstraction of a sort action
+ * 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){
+               }
+               
                virtual ~SortAction(){};
 
                /**
                 * Applies the action on the GeneOrder and returning it.
                 */
                virtual GeneOrder& operator()(GeneOrder& go) const{
-                       return go;
+                       return (*_action)(go);
                }
 
                /**
                 * Compares sort actions.
                 */
                virtual bool operator==(const SortAction& sa) const{
-                       return false;
+                       return (*_action) == (sa._action.get() == 0 ? sa : *sa._action);
                }
+       private:
+               ActionPointer _action;
+
 };
 
 #endif