Program Listing for File CombinedStoppingCondition.h

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

#ifndef __COMBINED_STOPPING_CONDITION_H
#define __COMBINED_STOPPING_CONDITION_H

#include "../Core/SharedLibraryExportMacros.h"
#include "StoppingCondition.h"
#include <vector>

namespace Evolve {

    class LIB_PUBLIC CombinedStoppingCondition : public StoppingCondition {
    private:
        std::vector<StoppingCondition *> __sub_conditions;

        unsigned __num_subconditions;

        bool __delete_subcond;

        std::vector<StoppingConditionType> __types;

        void update_meta_information(const StoppingCondition *rhs);

        void add_subcondition_values(
                const StoppingCondition *cond,

                Core::EvolModeType evol_mode,

                const std::valarray<double> &orbit,

                const std::valarray<double> &derivatives,

                size_t &first_index,

                std::valarray<double> &values,

                std::valarray<double> &derivs) const;

        std::vector<StoppingCondition *>::const_iterator
            find_condition(unsigned &index) const;

        std::vector<StoppingCondition *>::iterator
            find_condition(unsigned &index);

    public:
        CombinedStoppingCondition() :
            __sub_conditions(), __num_subconditions(0), __delete_subcond(true) {}

        CombinedStoppingCondition &operator|=(CombinedStoppingCondition &rhs);

        CombinedStoppingCondition &operator|=(StoppingCondition *rhs);

        std::valarray<double> operator()(
                Core::EvolModeType evol_mode,
                const std::valarray<double> &orbit,
                const std::valarray<double> &derivatives,
                std::valarray<double> &stop_deriv) const;

        void no_delete_subcond() {__delete_subcond=false;}

        virtual size_t num_subconditions() const {return __num_subconditions;}

        StoppingConditionType type(unsigned index=0) const
        {return __types[index];}

        virtual void reached(short deriv_sign, unsigned index=0);

        short expected_crossing_deriv_sign(unsigned index = 0) const;

        virtual std::string describe(int index) const;

        ~CombinedStoppingCondition();
    }; //End CombinedStoppingCondition class.

} //End Evolve namespace.

#endif