Program Listing for File Functions.h¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/Core/Functions.h)
#ifndef __FUNCTIONS_H
#define __FUNCTIONS_H
#include "../Core/SharedLibraryExportMacros.h"
#include "Common.h"
#include "Error.h"
//#include <solve_polynomial.h>
#include <cmath>
#include <limits>
#include <valarray>
#include <list>
#include <iterator>
#include <iostream>
#ifndef NO_SERIALIZE
#include <boost/serialization/base_object.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/export.hpp>
#endif
namespace Core {
class InterpSolutionIterator;
template<class InputDataType, class OutputDataType>
class LIB_LOCAL OneArgumentFunction {
#ifndef NO_SERIALIZE
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &, const unsigned int) {}
#endif
public:
virtual OutputDataType operator()(
InputDataType in_value
) const =0;
virtual InputDataType range_high() const=0;
virtual InputDataType range_low() const=0;
virtual InterpSolutionIterator crossings(double y=0) const =0;
virtual ~OneArgumentFunction() {};
};
class LIB_LOCAL FunctionDerivatives {
public:
virtual double order(unsigned deriv_order=1) const =0;
virtual ~FunctionDerivatives() {};
};
class LIB_LOCAL CubicSplineDerivatives : public FunctionDerivatives {
private:
double zeroth,
first,
second;
public:
CubicSplineDerivatives(
double func_value,
double first_deriv,
double second_deriv);
double order(unsigned deriv_order=1) const;
};
class LIB_LOCAL OneArgumentDiffFunction
: public OneArgumentFunction<double,double> {
private :
#ifndef NO_SERIALIZE
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int) {
ar & boost::serialization::base_object<
OneArgumentFunction<double,double>
>(*this);
}
#endif
public:
virtual const FunctionDerivatives *deriv(double x) const=0;
virtual ~OneArgumentDiffFunction() {}
};
class LIB_LOCAL ZeroDerivatives : public FunctionDerivatives {
public:
ZeroDerivatives() {}
double order(unsigned =1) const {return 0;}
};
class LIB_LOCAL ZeroFunction : public OneArgumentDiffFunction {
private :
#ifndef NO_SERIALIZE
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int) {
ar & boost::serialization::base_object< OneArgumentDiffFunction >(
*this
);
}
#endif
public:
virtual const FunctionDerivatives *deriv(double) const
{return new ZeroDerivatives;}
double operator()(double) const {return 0;}
double range_high() const {return Inf;}
double range_low() const {return -Inf;}
InterpSolutionIterator crossings(double =0) const;
};
} //End Core namespace.
#endif