# Functors Functors offers a number of Function Objects for various purposes. The functors are grouped in several categories. Some mathematic functions will try to use the GSL if USE_GSL is defined. In that case, you will have to link against GSL libraries. ## List of functors ### Common ####
      template <typename TSrc, typename TDest>
    StaticCaster
      value_type
| Type of the parameters for operator(), alias for TSrc.
      result_type
| Return type of operator(), alias for TDest.
      StaticCaster<TSrc, TDest>()
| Constructor.
      TDest operator()(const TSrc &src) const
| Return static_cast<TDest>(src)
####
      template <T>
    Printer
      value_type
| Type of the parameters for operator().
      result_type
| Return type of operator(), i.e. void.
      Printer<T>(std::string _delimiter = " ")
| Constructor
      void operator()(const T &item) const
| Prints "item" and a delimiter to the stdout.
####
      template <T, U>
    Select1st
      value_type
| Type of the parameters for operator(), alias for std::pair<T, U>.
      result_type
| Return type of operator(), alias for template parameter T.
      Select1st<T, U>()
| Constructor
      T operator()(const std::pair<T, U> &p) const
| Returns "p.first".
####
      template <T1, T2>
    Select2nd
      value_type
| Type of the parameters for operator(), alias for std::pair<T, U>.
      result_type
| Return type of operator(), alias for template parameter U.
      Select2nd<T, U>()
| Constructor
      U operator()(const std::pair<T, U> &p) const
| Returns "p.second".
####
      template <R>
    Chooser1
      value_type
| Type of the parameters for operator(), alias for template parameter R.
      result_type
| Return type of operator(), alias for template parameter R.
      Chooser1<R>(R trueValue, R falseValue)
| Constructor
      R operator()(const bool &b) const
| Returns "b ? trueValue : falseValue", chooses one of the specified values depending on the input.
####
      template <T, R, Operator>
    Chooser1Op
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter R.
      Chooser1Op<R>(Operator op, R trueValue, R falseValue)
| Constructor
      R operator()(const T &o)
| Returns "op(o) ? trueValue : falseValue", applies the specified Operator to the input and chooses one of the specified values.
####
      template <T, R, Operator>
    Chooser2Op
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter R.
      Chooser2<R>(Operator op, R trueValue, R falseValue)
| Constructor
      R operator()(const T &lhs, const T &rhs)
| Returns "op(lhs, rhs) ? trueValue : falseValue", applies the specified binary Operator to the input and chooses one of the specified values.
### Binary Functions ####
      template <T>
    binary_and
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter T.
      binary_and<T>()
| Constructor
      T operator()(const T &lhs, const T &rhs) const
| Returns "lhs & rhs", the binary operator AND applied to "lhs" and "rhs".
####
      template <T>
    binary_or
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter T.
      binary_or<T>()
| Constructor
      T operator()(const T &lhs, const T &rhs) const
| Returns "lhs | rhs", the binary operator OR applied to "lhs" and "rhs".
####
      template <T>
    binary_xor
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter T.
      binary_xor<T>()
| Constructor
      T operator()(const T &lhs, const T &rhs) const
| Returns lhs ^ rhs, the binary operator XOR applied to "lhs" and "rhs".
####
      template <T>
    binary_not
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter T.
      binary_not<T>()
| Constructor
      T operator()(const T &o) const
| Returns ~o, the binary operator NOT applied to o.
### Math ####
      template <class Vector, typename register_type = Vector::value_type>
    Rotator3D
A Rotator3D applies a 3D rotation along the specified axis to a 3D Vector. The Vector class can essientially be any container whose size equals 3. The template parameter register_type corresponds to the type used for calculations, for example, one may choose to have a Vector of ints, but let the calculations be performed as floats.
      value_type
| Alias for value_type for template parameter Vector.
      result_type
| Return type of operator(), alias for template parameter Vector.
      Rotator3D<Vector>(unsigned axis, register_type angle)
| Constructor. Vectors will be rotated angle radians around the given axis.
      Vector operator()(const Vector &v) const
| Rotates v and returns the result.
####
      template <class Function>
    Derivative
The template parameters class Function must offer a typedef for value_type and an operator of the following form:
      value_type operator()(const value_type &x) const
The class Function is thus assumed to model a mathematic function with fixed behaviour, which is enforced by the constness of the operator. The Derivative computes a numerical approximation of the derivative of a given function, taking care of numerical precision and stability.
      value_type
| An alias for typename "Function::value_type".
      result_type
| Return type of operator().
      Derivative<Function>(const Function &f)
| Constructor. Parameter f must be a functor implementing a Function as specified.
      value_type operator()(const value_type &x) const
| Returns the derivative of Function f in point x.
####
      template <typename T>
    class LinearFunc
Models the function y = ax + b.
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter T.
      LinearFunc<T>(const T a, const T b)
| Constructor.
      T operator()(const T &x) const
| Returns ax + b.
####
      template <typename T>
    class QuadraticFunc
Models the function y = ax^2 + bx + c.
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter T.
      QuadraticFunc<T>(const T a, const T b, const T c)
| Constructor.
      T operator()(const T &x) const
| Returns ax^2 + bx + c.
####
      template <typename T, unsigned n>
    class Polynomial
Models an nth degree polynomial function. Keep in mind that an nth degree polynomial has n + 1 coefficients.
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter T.
      template <typename Iterator>
    Polynomial<T, n>(Iterator begin, Iterator end)
| Constructor. The elements in the range begin to end are the coefficients of the polynomial function y, where the ith element in the range corresponds to the coefficient of x^i. Keep in mind that there must be n + 1 elements in the given range!
      T operator()(T x) const
| Returns the value of y at point x.
####
      template <typename T>
    class Gaussian
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter T.
      Gaussian(const T mu, const T sigmaSq)
| Constructor, muis the mean af the distribution and the variance is given by sigmaSq.
      T operator()(const T &x) const
| Returns value of the standard Gaussian probability density function at location x.
####
      template <typename T>
    class Clamp
Clamp a value between two specified values.
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter T.
      Clamp<T>(const T low, const T high)
| Constructor
      T operator()(const T &x) const
| Returns the value in the range [low, high] that is closest to x.
####
      template <typename T>
    struct Square
      value_type
| Type of the parameters for operator(), alias for template parameter T.
      result_type
| Return type of operator(), alias for template parameter T.
      T operator()(const T &x) const
| Return the square of x.
####
    template <typename T, typename U, class Operator = std::less<T> >
    class PairFirstCompare
      value_type
| Type of the objects to be compared, alias for template parameter T.
      result_type
| Return type of operator().
      T operator()(const T &lhs, const std::pair<T, U> &rhs) const
| Compares lhs to rhs.first.
      T operator()(const std::pair<T, U> &lhs, const T &rhs) const
| Compares lhs.first to rhs.
      T operator()(const std::pair<T, U> &lhs,
    	     const std::pair<T, U> &rhs) const
| Compares lhs.first to rhs.first.