Skip to content
Snippets Groups Projects
formatters.h 5.23 KiB
Newer Older
#ifndef LIBWCCL_OPS_FORMATTERS_H
#define LIBWCCL_OPS_FORMATTERS_H

#include <libwccl/ops/functions.h>

namespace Wccl {

/**
 * Class that formats unary functions as string
 */
struct UnaryFunctionFormatter
{
	/** 
	 * @returns String representation of an unary function.
	 * It is in form of	
	 * operator_name(arg_str)	
	 * although the open and close brackets can be changed
	 * (some operators use [])
	 */
	static std::string to_string(
		const Corpus2::Tagset& tagset,
		const FunctionBase& f,
		const std::string& arg_str,
		const char* open_bracket = "(",
		const char* close_bracket = ")");

	/** 
	 * @returns String representation of an unary function.
	 * operator_name(argument_expression_string)
	 * although the open and close brackets can be changed
	 * (some operators use [])
	 */
	static std::string to_string(
		const Corpus2::Tagset& tagset,
		const FunctionBase& f,
		const FunctionBase& arg_expr,
		const char* open_bracket = "(",
		const char* close_bracket = ")")
	{
		return to_string(
			tagset,
			f,
			arg_expr.to_string(tagset),
			open_bracket, close_bracket);
	}
	/** 
	 * @returns Raw string representation of an unary function.
	 * Does not require tagset, may contain internal info
	 * and/or be incomplete. It is in form of
	 * raw_operator_name(arg_str)
	 * although the open and close brackets can be changed
	 * (some operators use [])
	 */
	static std::string to_raw_string(
		const FunctionBase& f,
		const std::string& arg_str,
		const char* open_bracket = "(",
	/** 
	 * @returns Raw string representation of an unary function.
	 * Does not require tagset, may contain internal info
	 * and/or be incomplete. It is in form of
	 * raw_operator_name(raw_argument_expression_string)
	 * although the open and close brackets can be changed
	 * (some operators use [])
	 */
	static std::string to_raw_string(
		const FunctionBase& f,
		const FunctionBase& arg_expr,
		const char* open_bracket = "(",
		const char* close_bracket = ")")
	{
		return to_raw_string(
			f,
			arg_expr.to_raw_string(),
			open_bracket,
			close_bracket);
	}
};

/**
 * Class that formats binary functions as string
 */
struct BinaryFunctionFormatter
{
	/** 
	 * @returns String representation of a binary function.
	 * It is in form of
	 * operator_name(arg1_str, arg2_str)
	 */
	static std::string to_string(
		const Corpus2::Tagset& tagset,
		const FunctionBase& f,
		const std::string& arg1_str,
		const std::string& arg2_str);

	/** 
	 * @returns String representation of a binary function.
	 * operator_name(arg1_str, arg2_expr_string)
	 */
	static std::string to_string(
		const Corpus2::Tagset& tagset,
		const FunctionBase& f,
		const std::string& arg1_str,
		const FunctionBase& arg2_expr)
	{
		return to_string(
			tagset,
			f,
			arg1_str,
			arg2_expr.to_string(tagset));
	}
	/** 
	 * @returns String representation of a binary function.
	 * It is in form of
	 * operator_name(arg1_expr_string, arg2_str)
	 */
	static std::string to_string(
		const Corpus2::Tagset& tagset,
		const FunctionBase& f,
		const FunctionBase& arg1_expr,
		const std::string& arg2_str)
	{
		return to_string(
			tagset,
			f,
			arg1_expr.to_string(tagset),
			arg2_str);
	}

	/** 
	 * @returns String representation of a binary function.
	 * It is in form of
	 * operator_name(arg1_expr_string, arg2_expr_string)
	 */
	static std::string to_string(
		const Corpus2::Tagset& tagset,
		const FunctionBase& f,
		const FunctionBase& arg1_expr,
		const FunctionBase& arg2_expr)
	{
		return to_string(
			tagset,
			f,
			arg1_expr.to_string(tagset),
			arg2_expr.to_string(tagset));
	}

	/** 
	 * @returns Raw string representation of a binary function.
	 * Does not require tagset, may contain internal info
	 * and/or be incomplete. It is in form of
	 * raw_op_name(arg1_str, arg2_str)
	 */
	static std::string to_raw_string(
		const FunctionBase& f,
		const std::string& arg1_str,
		const std::string& arg2_str);

	/** 
	 * @returns Raw string representation of a binary function.
	 * Does not require tagset, may contain internal info
	 * and/or be incomplete. It is in form of
	 * raw_op_name(arg1_str, raw_arg2_expr_string)
	 */
	static std::string to_raw_string(
		const FunctionBase& f,
		const std::string& arg1_str,
		const FunctionBase& arg2_expr)
	{
		return to_raw_string(
			f,
			arg1_str,
			arg2_expr.to_raw_string());
	}

	/** 
	 * @returns Raw string representation of a binary function.
	 * Does not require tagset, may contain internal info
	 * and/or be incomplete. It is in form of
	 * raw_op_name(raw_arg1_expr_string, arg1_str)
	 */
	static std::string to_raw_string(
		const FunctionBase& f,
		const FunctionBase& arg1_expr,
		const std::string& arg2_str)
	{
		return to_raw_string(
			f,
			arg1_expr.to_raw_string(),
			arg2_str);
	}
	/** 
	 * @returns Raw string representation of a binary function.
	 * Does not require tagset, may contain internal info
	 * and/or be incomplete. It is in form of
	 * raw_op_name(raw_arg1_expr_string, raw_arg2_expr_string)
	 */
	static std::string to_raw_string(
		const FunctionBase& f,
		const FunctionBase& arg1_expr,
		const FunctionBase& arg2_expr)
	{
		return to_raw_string(
			f,
			arg1_expr.to_raw_string(),
			arg2_expr.to_raw_string());
	}