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 * Compares sort actions.
51 virtual bool operator<(const SortActionImpl& sa) const = 0;
54 * Gives a string representation of the action, for output
56 virtual std::string toString() const = 0;
60 * Abstraction of a sort action, all SortActionImpls has to be immutable.
62 * \author Michael Andreen
66 typedef shared_ptr<SortActionImpl> ActionPointer;
69 * Creates a new sort action, given a specified action.
70 * SortAction promises to remove the given action.
72 SortAction(SortActionImpl* sa): _action(sa){
75 SortAction(const SortAction& sa): _action(sa._action){
78 const SortAction& operator=(const SortAction& sa){
87 * Applies the action on the GeneOrder and returning it.
89 GeneOrder& operator()(GeneOrder& go) const{
90 return (*_action)(go);
94 * Compares sort actions.
96 bool operator==(const SortAction& sa) const{
97 return (*_action) == (*sa._action);
101 * Compares sort actions.
103 bool operator<(const SortAction& sa) const{
104 return (*_action) < (*sa._action);
108 * Compares sort actions.
110 bool operator==(const SortActionImpl& sa) const{
111 return (*_action) == sa;
115 * Gives a string representation of the action, for output
117 std::string toString() const{
118 return _action->toString();
122 * Gives access to the implementation
124 const SortActionImpl& impl() const{
128 ActionPointer _action;