Program Listing for File StopHistoryInterval.h

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

#ifndef __STOP_HISTORY_INTERVAL_H
#define __STOP_HISTORY_INTERVAL_H

#include "../Core/SharedLibraryExportMacros.h"
#include "../Core/Error.h"
#include <valarray>
#include <list>
#include <ostream>
#include <cassert>
#include <iomanip>

namespace Evolve {

    class LIB_LOCAL StopHistoryInterval {
    private:
        size_t __num_points,
               __point_i;

        std::list<double>::const_iterator __first_age,

            __last_age,

            __history_age_end,

            __discarded_age_begin,

            __age_i;

        std::list< std::valarray<double> >::const_iterator __first_stop_cond,

            __last_stop_cond,

            __stop_cond_history_end,

            __stop_cond_discarded_begin,

            __stop_cond_i,

            __first_stop_deriv,

            __last_stop_deriv,

            __stop_deriv_history_end,

            __stop_deriv_discarded_begin,

            __stop_deriv_i;

        void advance_iterator_set(std::list<double>::const_iterator &age_i,
                std::list< std::valarray<double> >::const_iterator &cond_i,
                std::list< std::valarray<double> >::const_iterator &deriv_i);

        void retreat_iterator_set(std::list<double>::const_iterator &age_i,
                std::list< std::valarray<double> >::const_iterator &cond_i,
                std::list< std::valarray<double> >::const_iterator &deriv_i);

    public:
        StopHistoryInterval(
            size_t num_points=0,

            std::list<double>::const_iterator
            first_age=std::list<double>::const_iterator(),

            std::list<double>::const_iterator
            history_age_end=std::list<double>::const_iterator(),

            std::list<double>::const_iterator
            discarded_age_begin=std::list<double>::const_iterator(),

            std::list< std::valarray<double> >::const_iterator
            first_stop_cond
            =
            std::list< std::valarray<double> >::const_iterator(),

            std::list< std::valarray<double> >::const_iterator
            stop_cond_history_end
            =
            std::list< std::valarray<double> >::const_iterator(),

            std::list< std::valarray<double> >::const_iterator
            stop_cond_discarded_begin
            =
            std::list< std::valarray<double> >::const_iterator(),

            std::list< std::valarray<double> >::const_iterator
            first_stop_deriv
            =
            std::list< std::valarray<double> >::const_iterator(),

            std::list< std::valarray<double> >::const_iterator
            stop_deriv_history_end
            =
            std::list< std::valarray<double> >::const_iterator(),

            std::list< std::valarray<double> >::const_iterator
            stop_deriv_discarded_begin
            =
            std::list< std::valarray<double> >::const_iterator()
        );

        StopHistoryInterval(const StopHistoryInterval &orig);

        void reset();

        StopHistoryInterval &operator++();

        StopHistoryInterval operator++(int);

        StopHistoryInterval &operator--();

        StopHistoryInterval operator--(int);

        StopHistoryInterval &operator<<(size_t n);

        StopHistoryInterval &operator>>(size_t n);

        StopHistoryInterval &operator=(const StopHistoryInterval &rhs);

        bool operator==(const StopHistoryInterval &rhs);

        void grow_left(size_t n=1);

        void grow_right(size_t n=1);

        size_t num_points() {return __num_points;}

        size_t current_point_index() {return __point_i;}

        size_t number_conditions() {return __first_stop_cond->size();}

        bool end() {return __point_i==__num_points;}

        double first_age() const {return *__first_age;}

        double last_age() const {return *__last_age;}

        double age() const {return *__age_i;}

        double first_stop_condition_value(size_t condition_index) const
        {return (*__first_stop_cond)[condition_index];}

        double last_stop_condition_value(size_t condition_index) const
        {return (*__last_stop_cond)[condition_index];}

        double stop_condition_value(size_t condition_index) const
        {return (*__stop_cond_i)[condition_index];}

        double first_stop_condition_deriv(size_t condition_index) const
        {return (*__first_stop_deriv)[condition_index];}

        double last_stop_condition_deriv(size_t condition_index) const
        {return (*__last_stop_deriv)[condition_index];}

        double stop_condition_deriv(size_t condition_index) const
        {return (*__stop_deriv_i)[condition_index];}
    }; //End StopHistoryInternval class.

    LIB_LOCAL std::ostream &operator<<(std::ostream &os,
                                       StopHistoryInterval interval);

}//End Evolve namespace.

#endif