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__
27 * Abstraction of a sort action, all child actions has to be immutable.
29 * \author Michael Andreen
33 typedef std::tr1::shared_ptr<SortAction> ActionPointer;
36 * Creates a new sort action, given a specified action.
37 * SortAction promises to remove the given action.
39 SortAction(SortAction* sa): _action(sa){
42 SortAction(const SortAction& sa): _action(sa._action){
45 virtual const SortAction& operator=(const SortAction& sa){
51 virtual ~SortAction(){};
54 * Applies the action on the GeneOrder and returning it.
56 virtual GeneOrder& operator()(GeneOrder& go) const{
57 return (*_action)(go);
61 * Compares sort actions.
63 virtual bool operator==(const SortAction& sa) const{
64 return (*_action) == (sa._action.get() == 0 ? sa : *sa._action);
67 ActionPointer _action;