yat/statistics/VectorFunction.h

Code
Comments
Other
Rev Date Author Line
827 19 Mar 07 peter 1 #ifndef _theplu_yat_statistics_vector_function_
827 19 Mar 07 peter 2 #define _theplu_yat_statistics_vector_function_
827 19 Mar 07 peter 3
827 19 Mar 07 peter 4 // $Id$
827 19 Mar 07 peter 5
827 19 Mar 07 peter 6 /*
4359 23 Aug 23 peter 7   Copyright (C) 2007 Peter Johansson
4359 23 Aug 23 peter 8   Copyright (C) 2008 Jari Häkkinen, Peter Johansson
2986 18 Feb 13 peter 9   Copyright (C) 2013 Jari Häkkinen
827 19 Mar 07 peter 10
1437 25 Aug 08 peter 11   This file is part of the yat library, http://dev.thep.lu.se/yat
827 19 Mar 07 peter 12
827 19 Mar 07 peter 13   The yat library is free software; you can redistribute it and/or
827 19 Mar 07 peter 14   modify it under the terms of the GNU General Public License as
1486 09 Sep 08 jari 15   published by the Free Software Foundation; either version 3 of the
827 19 Mar 07 peter 16   License, or (at your option) any later version.
827 19 Mar 07 peter 17
827 19 Mar 07 peter 18   The yat library is distributed in the hope that it will be useful,
827 19 Mar 07 peter 19   but WITHOUT ANY WARRANTY; without even the implied warranty of
827 19 Mar 07 peter 20   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
827 19 Mar 07 peter 21   General Public License for more details.
827 19 Mar 07 peter 22
827 19 Mar 07 peter 23   You should have received a copy of the GNU General Public License
1487 10 Sep 08 jari 24   along with yat. If not, see <http://www.gnu.org/licenses/>.
827 19 Mar 07 peter 25 */
827 19 Mar 07 peter 26
2966 23 Jan 13 jari 27 #include <cstddef>
827 19 Mar 07 peter 28 #include <vector>
827 19 Mar 07 peter 29
827 19 Mar 07 peter 30 namespace theplu {
827 19 Mar 07 peter 31 namespace yat {
827 19 Mar 07 peter 32 namespace statistics {
827 19 Mar 07 peter 33
827 19 Mar 07 peter 34   ///
827 19 Mar 07 peter 35   /// \brief Interface Class for vector functors.
827 19 Mar 07 peter 36   ///
4200 19 Aug 22 peter 37   struct VectorFunction
827 19 Mar 07 peter 38   {
966 11 Oct 07 peter 39     /**
966 11 Oct 07 peter 40        \brief Destructor
966 11 Oct 07 peter 41      */
827 19 Mar 07 peter 42     virtual ~VectorFunction();
966 11 Oct 07 peter 43
966 11 Oct 07 peter 44     /**
966 11 Oct 07 peter 45        \brief abstract interface
966 11 Oct 07 peter 46      */
827 19 Mar 07 peter 47     virtual double operator()(const std::vector<double>&) const=0;
827 19 Mar 07 peter 48   };
827 19 Mar 07 peter 49
827 19 Mar 07 peter 50
828 19 Mar 07 peter 51   ///
828 19 Mar 07 peter 52   /// @brief Larget element
828 19 Mar 07 peter 53   ///
827 19 Mar 07 peter 54   struct Max : public VectorFunction
827 19 Mar 07 peter 55   {
827 19 Mar 07 peter 56     ///
827 19 Mar 07 peter 57     /// \return Largest element
827 19 Mar 07 peter 58     ///
827 19 Mar 07 peter 59     double operator()(const std::vector<double>&) const;
827 19 Mar 07 peter 60   };
827 19 Mar 07 peter 61
827 19 Mar 07 peter 62
828 19 Mar 07 peter 63   ///
828 19 Mar 07 peter 64   /// @brief Median element
828 19 Mar 07 peter 65   ///
4200 19 Aug 22 peter 66   struct Median : public VectorFunction
827 19 Mar 07 peter 67   {
827 19 Mar 07 peter 68     ///
828 19 Mar 07 peter 69     /// \see statistics::median(std::vector<double>, bool)
828 19 Mar 07 peter 70     ///
827 19 Mar 07 peter 71     /// \return Median
827 19 Mar 07 peter 72     ///
827 19 Mar 07 peter 73     double operator()(const std::vector<double>&) const;
827 19 Mar 07 peter 74   };
827 19 Mar 07 peter 75
828 19 Mar 07 peter 76   ///
828 19 Mar 07 peter 77   /// \brief Mean element
828 19 Mar 07 peter 78   ///
827 19 Mar 07 peter 79   struct Mean : public VectorFunction
827 19 Mar 07 peter 80   {
827 19 Mar 07 peter 81     ///
827 19 Mar 07 peter 82     /// \return Mean
827 19 Mar 07 peter 83     ///
827 19 Mar 07 peter 84     double operator()(const std::vector<double>&) const;
827 19 Mar 07 peter 85   };
827 19 Mar 07 peter 86
827 19 Mar 07 peter 87
828 19 Mar 07 peter 88   ///
828 19 Mar 07 peter 89   /// \brief Smallest element
828 19 Mar 07 peter 90   ///
4200 19 Aug 22 peter 91   struct Min : public VectorFunction
827 19 Mar 07 peter 92   {
827 19 Mar 07 peter 93     ///
827 19 Mar 07 peter 94     /// \return Smallest element
827 19 Mar 07 peter 95     ///
827 19 Mar 07 peter 96     double operator()(const std::vector<double>&) const;
827 19 Mar 07 peter 97   };
827 19 Mar 07 peter 98
966 11 Oct 07 peter 99   /**
966 11 Oct 07 peter 100      Functor that picks Nth smalles element in a vector.
966 11 Oct 07 peter 101    */
827 19 Mar 07 peter 102   class Nth_Element : public VectorFunction
827 19 Mar 07 peter 103   {
827 19 Mar 07 peter 104   public:
827 19 Mar 07 peter 105     ///
827 19 Mar 07 peter 106     /// \param N equal to 1 gives identical object as Min (but less
827 19 Mar 07 peter 107     /// efficient)
827 19 Mar 07 peter 108     ///
1261 08 Apr 08 peter 109     Nth_Element(size_t N);
827 19 Mar 07 peter 110
827 19 Mar 07 peter 111     ///
827 19 Mar 07 peter 112     /// \return Nth smallest element
827 19 Mar 07 peter 113     ///
827 19 Mar 07 peter 114     double operator()(const std::vector<double>&) const;
827 19 Mar 07 peter 115
827 19 Mar 07 peter 116   private:
1261 08 Apr 08 peter 117     size_t N_;
827 19 Mar 07 peter 118   };
827 19 Mar 07 peter 119
827 19 Mar 07 peter 120 }}} // of namespace statistics, yat, and theplu
827 19 Mar 07 peter 121
827 19 Mar 07 peter 122 #endif