Program Listing for File InterpSolutionIterator.h

Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/Core/InterpSolutionIterator.h)

#ifndef __INTERP_SOLUTION_ITERATOR_H
#define __INTERP_SOLUTION_ITERATOR_H

#include "../Core/SharedLibraryExportMacros.h"
#include "SerializableSpline1dInterpolant.h"

#include "Common.h"
#include <valarray>

namespace Core {
    class LIB_LOCAL InterpSolutionIterator :
        public std::iterator<std::input_iterator_tag, double, ptrdiff_t,
        const double*, const double&>
    {
    private:
        const alglib_impl::spline1dinterpolant *spline;

        int node_index;

        double min_diff,

               y;

        std::list<double>::const_iterator solution_iter;

        std::list<double> solutions;

        bool is_out_of_range;

        void get_solutions();
    public:
        InterpSolutionIterator() {};

        InterpSolutionIterator(const InterpSolutionIterator &rhs);

        InterpSolutionIterator(
            const alglib::spline1dinterpolant &spline_var,
            double offset, double min_sol_distance=1e-8
        );

        InterpSolutionIterator &operator++();

        InterpSolutionIterator operator++(int);

        InterpSolutionIterator &operator--();

        InterpSolutionIterator operator--(int);

        const double &operator*() const;

        bool operator==(const InterpSolutionIterator &rhs) const;

        bool operator!=(const InterpSolutionIterator &rhs) const;

        bool out_of_range() const;
    }; //End InterpSolutionIterator class.

} //End Core namespace.

#endif