#include <libwccl/ops/formatters.h>

namespace Wccl {

// ------ UnaryFunctionFormatter -----

std::string UnaryFunctionFormatter::to_raw_string(
	const FunctionBase& f,
	const FunctionBase& arg_expr,
	const char* open_bracket,
	const char* close_bracket)
{
	std::string s(f.raw_operator_name());
	s.append(open_bracket);
	s.append(arg_expr.to_raw_string());
	s.append(close_bracket);
	return s;
}

std::string UnaryFunctionFormatter::to_string(
	const Corpus2::Tagset& tagset,
	const FunctionBase& f,
	const FunctionBase& arg_expr,
	const char* open_bracket,
	const char* close_bracket)
{
	std::string s(f.operator_name(tagset));
	s.append(open_bracket);
	s.append(arg_expr.to_string(tagset));
	s.append(close_bracket);
	return s;
}

// ----- BinaryFunctionFormatter ------

std::string BinaryFunctionFormatter::to_string(
	const Corpus2::Tagset& tagset,
	const FunctionBase& f,
	const FunctionBase& arg1_expr,
	const FunctionBase& arg2_expr)
{
	std::string s(f.operator_name(tagset));
	s.append("(");
	s.append(arg1_expr.to_string(tagset));
	s.append(", ");
	s.append(arg2_expr.to_string(tagset));
	s.append(")");
	return s;
}

std::string BinaryFunctionFormatter::to_raw_string(
	const FunctionBase& f,
	const FunctionBase& arg1_expr,
	const FunctionBase& arg2_expr)
{
	std::string s(f.raw_operator_name());
	s.append("(");
	s.append(arg1_expr.to_raw_string());
	s.append(", ");
	s.append(arg2_expr.to_raw_string());
	s.append(")");
	return s;
}

} /* end ns Wccl */