#ifndef __SORTACTION_H__
#define __SORTACTION_H__
+#include <tr1/memory>
+#include <string>
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){
+ }
+
+ SortAction(const SortAction& sa): _action(sa._action){
+ }
+
+ virtual const SortAction& operator=(const SortAction& sa){
+ if (this != &sa)
+ _action = sa._action;
+ return *this;
+ }
+
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);
}
+
+ /**
+ * Gives a string representation of the action, for output
+ */
+ virtual std::string toString() const{
+ return _action->toString();
+ }
+ private:
+ ActionPointer _action;
+
};
#endif