#ifndef LIBWCCL_ANTLRPARSERRESULT_H
#define LIBWCCL_ANTLRPARSERRESULT_H

#include <boost/shared_ptr.hpp>

#include <libwccl/variables.h>
#include <libwccl/ops/functions.h>


template<class T>
class ANTLRParserResult;

class ANTLRParserResultBase
{
public:
	ANTLRParserResultBase()
		: variables(new Wccl::Variables())
	{
	}

	boost::shared_ptr<Wccl::Variables> variables;

	virtual boost::shared_ptr<Wccl::FunctionBase> get_op_base() const = 0;
};

template<class T>
class ANTLRParserResult : public ANTLRParserResultBase
{
public:
	ANTLRParserResult()
	{
	}

	boost::shared_ptr<Wccl::Variables> variables;
	boost::shared_ptr<Wccl::Function<T> > op;

	boost::shared_ptr<Wccl::FunctionBase> get_op_base() const
	{
		return op;
	}
};

#endif // ANTLRPARSERRESULT_H