Program Listing for File ConstSolutionIterator.h

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

#ifndef __SOLUTION_ITERATOR_H
#define __SOLUTION_ITERATOR_H

#include "BinarySystem.h"
#include "../IO/IOColumns.h"
#include "../Star/EvolvingStar.h"
#include "OrbitSolver.h"
#include "DissipatingZone.h"

namespace Evolve {

    class ConstSolutionIterator {
    private:
        std::vector< std::list<double>::const_iterator > __real_iterators;

        static std::list<double> __placeholder_list;

        static std::list<double>::const_iterator __placeholder_iterator;

        std::list<Core::EvolModeType>::const_iterator __mode;

        std::list<bool>::const_iterator __wind_saturation;

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

        double __mstar,

               __mplanet;

        Eigen::Vector3d __stellar_angmom;

        const InterpolatedEvolutionStar &__star;

        void create_missing_lists(
                const std::list<double> &tabulation_ages
        );

        void fix_no_evolution(
                double start_age,

                double end_age,

                double timestep,

                const std::list<double> &required_ages=std::list<double>()
        );
    public:
        ConstSolutionIterator(
                const OrbitSolver &solver,

                const BinarySystem &system,

                const InterpolatedEvolutionStar &star,

                double start_age,

                double end_age,

                double timestep,

                const std::list<double> &required_ages=std::list<double>()
        );

        const ConstSolutionIterator &operator++();

        operator bool() {return __real_iterators[OutCol::AGE]!=__last_age;}

        double real_quantity(OutCol::OutputColumns quantity);

        Core::EvolModeType evolution_mode() {return *__mode;}

        bool wind_saturation() {return *__wind_saturation;}
    }; //End ConstSolutionIterator class.

} //End Evolve namespace.

#endif