/*
 * EvalHelper.hpp
 *
 *  Created on: 25. 8. 2017
 *	  Author: Jan Travnicek
 */

#ifndef _EVAL_HELPER_HPP_
#define _EVAL_HELPER_HPP_

#include <alib/string>
#include <alib/memory>
#include <alib/vector>
#include <common/AlgorithmCategories.hpp>
#include <abstraction/Value.hpp>

namespace abstraction {

class EvalHelper {
	static std::shared_ptr < abstraction::Value > evalAbstraction ( std::shared_ptr < abstraction::OperationAbstraction > abstraction, const ext::vector < std::shared_ptr < abstraction::Value > > & params, const std::vector < bool > & moves );

public:
	static std::shared_ptr < abstraction::Value > evalAlgorithm ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::shared_ptr < abstraction::Value > > & params, const std::vector < bool > & moves, AlgorithmCategories::AlgorithmCategory category );
};

} /* namespace abstraction */

#endif /* _EVAL_HELPER_HPP_ */
