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__
32 virtual ~SortActionImpl(){};
35 * Applies the action on the GeneOrder and returning it.
37 virtual GeneOrder& operator()(GeneOrder& go) const = 0;
40 * Compares sort actions.
42 virtual bool operator==(const SortActionImpl& sa) const = 0;
45 * Gives a string representation of the action, for output
47 virtual std::string toString() const = 0;
51 * Abstraction of a sort action, all child actions has to be immutable.
53 * \author Michael Andreen
57 typedef std::tr1::shared_ptr<SortActionImpl> ActionPointer;
60 * Creates a new sort action, given a specified action.
61 * SortAction promises to remove the given action.
63 SortAction(SortActionImpl* sa): _action(sa){
66 SortAction(const SortAction& sa): _action(sa._action){
69 const SortAction& operator=(const SortAction& sa){
78 * Applies the action on the GeneOrder and returning it.
80 GeneOrder& operator()(GeneOrder& go) const{
81 return (*_action)(go);
85 * Compares sort actions.
87 bool operator==(const SortAction& sa) const{
88 return (*_action) == (*sa._action);
92 * Compares sort actions.
94 bool operator==(const SortActionImpl& sa) const{
95 return (*_action) == sa;
99 * Gives a string representation of the action, for output
101 std::string toString() const{
102 return _action->toString();
106 * Gives access to the implementation
108 const SortActionImpl& impl(){
112 ActionPointer _action;