Simple Application Framework
1
|
00001 /* 00002 This file is part of Simple Application Framework (Saf) library. 00003 Copyright (C) 2010 - 2012 Ondrej Danek <ondrej.danek@gmail.com> 00004 00005 This library is free software: you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published 00007 by the Free Software Foundation, either version 3 of the License, or 00008 (at your option) any later version. 00009 00010 Saf is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with Simple Application Framework library. If not, 00017 see <http://www.gnu.org/licenses/>. 00018 */ 00019 00028 #ifndef SAF_ALGO_SELECTION_MEDIAN_H 00029 #define SAF_ALGO_SELECTION_MEDIAN_H 00030 00031 #include "../Predicate.h" 00032 #include "../Swap.h" 00033 00034 namespace Saf 00035 { 00036 namespace Algo 00037 { 00038 namespace Selection 00039 { 00047 template <class T, class Pred> 00048 inline T Median(const T& x, const T& y, const T& z, Pred pred) 00049 { 00050 if (pred(x, y)) 00051 { 00052 if (pred(z, x)) 00053 { 00054 return x; 00055 } 00056 00057 return pred(z, y) ? z : y; 00058 } 00059 00060 if (pred(z, y)) 00061 { 00062 return y; 00063 } 00064 00065 return pred(z, x) ? z : x; 00066 } 00067 00075 template <class T> 00076 inline T Median(const T& x, const T& y, const T& z) 00077 { 00078 typename Predicate::Less<T> pred; 00079 return Median(x, y, z, pred); 00080 } 00081 } 00082 } 00083 } 00084 00085 #endif