]> ruin.nu Git - germs.git/blobdiff - src/sortaction.h
Added more doxygen documentation
[germs.git] / src / sortaction.h
index 0e59cd385e1701eff4b2a592fbd0dc9aae2c73bb..ec9a023710961ee0978651fe46f1520d6d18039d 100644 (file)
 #define __SORTACTION_H__
 
 #include <tr1/memory>
+#include <string>
 class GeneOrder;
+
+
+/**
+ * Abstraction for a sort action implementation, this is the base that other
+ * actions inherits from.
+ */
+class SortActionImpl{
+       public:
+
+               virtual ~SortActionImpl(){};
+
+               /**
+                * Applies the action on the GeneOrder and returning it.
+                */
+               virtual GeneOrder& operator()(GeneOrder& go) const = 0;
+
+               /**
+                * Compares sort actions.
+                */
+               virtual bool operator==(const SortActionImpl& sa) const = 0;
+               
+               /**
+                * Gives a string representation of the action, for output
+                */
+               virtual std::string toString() const = 0;
+};
+
 /**
- * Abstraction of a sort action, all child actions has to be immutable.
+ * Abstraction of a sort action, all SortActionImpls has to be immutable.
  *
  * \author Michael Andreen
  */
 class SortAction{
        public:
-               typedef std::tr1::shared_ptr<SortAction> ActionPointer;
+               typedef std::tr1::shared_ptr<SortActionImpl> ActionPointer;
 
                /**
                 * Creates a new sort action, given a specified action.
                 * SortAction promises to remove the given action.
                 */
-               SortAction(SortAction* sa): _action(sa){
+               SortAction(SortActionImpl* sa): _action(sa){
                }
 
                SortAction(const SortAction& sa): _action(sa._action){
                }
 
-               virtual const SortAction& operator=(const SortAction& sa){
+               const SortAction& operator=(const SortAction& sa){
                        if (this != &sa)
                                _action = sa._action;
                        return *this;
                }
                
-               virtual ~SortAction(){};
+               ~SortAction(){};
 
                /**
                 * Applies the action on the GeneOrder and returning it.
                 */
-               virtual GeneOrder& operator()(GeneOrder& go) const{
+               GeneOrder& operator()(GeneOrder& go) const{
                        return (*_action)(go);
                }
 
                /**
                 * Compares sort actions.
                 */
-               virtual bool operator==(const SortAction& sa) const{
-                       return (*_action) == (sa._action.get() == 0 ? sa : *sa._action);
+               bool operator==(const SortAction& sa) const{
+                       return (*_action) == (*sa._action);
+               }
+
+               /**
+                * Compares sort actions.
+                */
+               bool operator==(const SortActionImpl& sa) const{
+                       return (*_action) == sa;
+               }
+               
+               /**
+                * Gives a string representation of the action, for output
+                */
+               std::string toString() const{
+                       return _action->toString();
+               }
+
+               /**
+                * Gives access to the implementation
+                */
+               const SortActionImpl& impl() const{
+                       return *_action;
                }
        private:
                ActionPointer _action;