1 /***************************************************************************
2 * Copyright (C) 2006 by Michael Andreen *
3 * andreen@student.chalmers.se *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *
19 ***************************************************************************/
21 #ifndef __SORTACTION_H__
22 #define __SORTACTION_H__
24 #include "shared_ptr.h"
30 * Abstraction for a sort action implementation, this is the base that other
31 * actions inherits from.
36 virtual ~SortActionImpl(){};
39 * Applies the action on the GeneOrder and returning it.
41 virtual GeneOrder& operator()(GeneOrder& go) const = 0;
44 * Compares sort actions.
46 virtual bool operator==(const SortActionImpl& sa) const = 0;
49 * Gives a string representation of the action, for output
51 virtual std::string toString() const = 0;
55 * Abstraction of a sort action, all SortActionImpls has to be immutable.
57 * \author Michael Andreen
61 typedef shared_ptr<SortActionImpl> ActionPointer;
64 * Creates a new sort action, given a specified action.
65 * SortAction promises to remove the given action.
67 SortAction(SortActionImpl* sa): _action(sa){
70 SortAction(const SortAction& sa): _action(sa._action){
73 const SortAction& operator=(const SortAction& sa){
82 * Applies the action on the GeneOrder and returning it.
84 GeneOrder& operator()(GeneOrder& go) const{
85 return (*_action)(go);
89 * Compares sort actions.
91 bool operator==(const SortAction& sa) const{
92 return (*_action) == (*sa._action);
96 * Compares sort actions.
98 bool operator==(const SortActionImpl& sa) const{
99 return (*_action) == sa;
103 * Gives a string representation of the action, for output
105 std::string toString() const{
106 return _action->toString();
110 * Gives access to the implementation
112 const SortActionImpl& impl() const{
116 ActionPointer _action;