/*
 * Action.h
 *
 *  Created on: Apr 26, 2014
 *      Author: Manuel Sascha Weiand
 */

#ifndef STORM_FORMULA_ACTION_ACTION_H_
#define STORM_FORMULA_ACTION_ACTION_H_

#include <vector>
#include "src/storage/BitVector.h"

namespace storm {
namespace property {
namespace action {

template <class T>
class Action {

public:

	/*!
	 * Virtual destructor
	 * To ensure that the right destructor is called
	 */
	virtual ~Action() {
		//Intentionally left empty
	}

	/*!
	 *
	 */
	virtual std::vector<T> evaluate(std::vector<T> input) const = 0;

	/*!
	 *
	 */
	virtual storm::storage::BitVector<T> evaluate(storm::storage::BitVector<T> input) const = 0;

	/*!
	 *
	 */
	virtual std::string toString() const = 0;
};

} //namespace action
} //namespace property
} //namespace storm


#endif /* STORM_FORMULA_ACTION_ACTION_H_ */