/* gcalc.h generated by valac 0.44.11, the Vala compiler, do not modify */

#ifndef __GCALC_GCALC_H__
#define __GCALC_GCALC_H__

#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include <gee.h>
#include <float.h>
#include <math.h>
#include <gio/gio.h>

G_BEGIN_DECLS

#define GCALC_TYPE_MATH_EXPRESSION (gcalc_math_expression_get_type ())
#define GCALC_MATH_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_EXPRESSION, GCalcMathExpression))
#define GCALC_IS_MATH_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_EXPRESSION))
#define GCALC_MATH_EXPRESSION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_EXPRESSION, GCalcMathExpressionIface))

typedef struct _GCalcMathExpression GCalcMathExpression;
typedef struct _GCalcMathExpressionIface GCalcMathExpressionIface;

#define GCALC_TYPE_MATH_RESULT (gcalc_math_result_get_type ())
#define GCALC_MATH_RESULT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_RESULT, GCalcMathResult))
#define GCALC_IS_MATH_RESULT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_RESULT))
#define GCALC_MATH_RESULT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_RESULT, GCalcMathResultIface))

typedef struct _GCalcMathResult GCalcMathResult;
typedef struct _GCalcMathResultIface GCalcMathResultIface;

#define GCALC_TYPE_EXPRESSION_CONTAINER (gcalc_expression_container_get_type ())
#define GCALC_EXPRESSION_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_EXPRESSION_CONTAINER, GCalcExpressionContainer))
#define GCALC_EXPRESSION_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_EXPRESSION_CONTAINER, GCalcExpressionContainerClass))
#define GCALC_IS_EXPRESSION_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_EXPRESSION_CONTAINER))
#define GCALC_IS_EXPRESSION_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_EXPRESSION_CONTAINER))
#define GCALC_EXPRESSION_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_EXPRESSION_CONTAINER, GCalcExpressionContainerClass))

typedef struct _GCalcExpressionContainer GCalcExpressionContainer;
typedef struct _GCalcExpressionContainerClass GCalcExpressionContainerClass;

#define GCALC_TYPE_EXPRESSION (gcalc_expression_get_type ())
#define GCALC_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_EXPRESSION, GCalcExpression))
#define GCALC_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_EXPRESSION, GCalcExpressionClass))
#define GCALC_IS_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_EXPRESSION))
#define GCALC_IS_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_EXPRESSION))
#define GCALC_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_EXPRESSION, GCalcExpressionClass))

typedef struct _GCalcExpression GCalcExpression;
typedef struct _GCalcExpressionClass GCalcExpressionClass;
typedef struct _GCalcExpressionPrivate GCalcExpressionPrivate;

#define GCALC_TYPE_MATH_OPERATOR (gcalc_math_operator_get_type ())
#define GCALC_MATH_OPERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_OPERATOR, GCalcMathOperator))
#define GCALC_IS_MATH_OPERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_OPERATOR))
#define GCALC_MATH_OPERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_OPERATOR, GCalcMathOperatorIface))

typedef struct _GCalcMathOperator GCalcMathOperator;
typedef struct _GCalcMathOperatorIface GCalcMathOperatorIface;

#define GCALC_TYPE_MATH_BINARY_OPERATOR (gcalc_math_binary_operator_get_type ())
#define GCALC_MATH_BINARY_OPERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_BINARY_OPERATOR, GCalcMathBinaryOperator))
#define GCALC_IS_MATH_BINARY_OPERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_BINARY_OPERATOR))
#define GCALC_MATH_BINARY_OPERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_BINARY_OPERATOR, GCalcMathBinaryOperatorIface))

typedef struct _GCalcMathBinaryOperator GCalcMathBinaryOperator;
typedef struct _GCalcMathBinaryOperatorIface GCalcMathBinaryOperatorIface;

#define GCALC_TYPE_MATH_ASSIGN (gcalc_math_assign_get_type ())
#define GCALC_MATH_ASSIGN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_ASSIGN, GCalcMathAssign))
#define GCALC_IS_MATH_ASSIGN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_ASSIGN))
#define GCALC_MATH_ASSIGN_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_ASSIGN, GCalcMathAssignIface))

typedef struct _GCalcMathAssign GCalcMathAssign;
typedef struct _GCalcMathAssignIface GCalcMathAssignIface;

#define GCALC_TYPE_ASSIGN (gcalc_assign_get_type ())
#define GCALC_ASSIGN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_ASSIGN, GCalcAssign))
#define GCALC_ASSIGN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_ASSIGN, GCalcAssignClass))
#define GCALC_IS_ASSIGN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_ASSIGN))
#define GCALC_IS_ASSIGN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_ASSIGN))
#define GCALC_ASSIGN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_ASSIGN, GCalcAssignClass))

typedef struct _GCalcAssign GCalcAssign;
typedef struct _GCalcAssignClass GCalcAssignClass;
typedef struct _GCalcAssignPrivate GCalcAssignPrivate;

#define GCALC_TYPE_MATH_CONSTANT (gcalc_math_constant_get_type ())
#define GCALC_MATH_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_CONSTANT, GCalcMathConstant))
#define GCALC_IS_MATH_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_CONSTANT))
#define GCALC_MATH_CONSTANT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_CONSTANT, GCalcMathConstantIface))

typedef struct _GCalcMathConstant GCalcMathConstant;
typedef struct _GCalcMathConstantIface GCalcMathConstantIface;

#define GCALC_TYPE_MATH_CONSTANT_NUMBER (gcalc_math_constant_number_get_type ())
#define GCALC_MATH_CONSTANT_NUMBER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_CONSTANT_NUMBER, GCalcMathConstantNumber))
#define GCALC_IS_MATH_CONSTANT_NUMBER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_CONSTANT_NUMBER))
#define GCALC_MATH_CONSTANT_NUMBER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_CONSTANT_NUMBER, GCalcMathConstantNumberIface))

typedef struct _GCalcMathConstantNumber GCalcMathConstantNumber;
typedef struct _GCalcMathConstantNumberIface GCalcMathConstantNumberIface;

#define GCALC_TYPE_MATH_CONSTANT_COMPLEX (gcalc_math_constant_complex_get_type ())
#define GCALC_MATH_CONSTANT_COMPLEX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_CONSTANT_COMPLEX, GCalcMathConstantComplex))
#define GCALC_IS_MATH_CONSTANT_COMPLEX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_CONSTANT_COMPLEX))
#define GCALC_MATH_CONSTANT_COMPLEX_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_CONSTANT_COMPLEX, GCalcMathConstantComplexIface))

typedef struct _GCalcMathConstantComplex GCalcMathConstantComplex;
typedef struct _GCalcMathConstantComplexIface GCalcMathConstantComplexIface;

#define GCALC_TYPE_CONSTANT (gcalc_constant_get_type ())
#define GCALC_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_CONSTANT, GCalcConstant))
#define GCALC_CONSTANT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_CONSTANT, GCalcConstantClass))
#define GCALC_IS_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_CONSTANT))
#define GCALC_IS_CONSTANT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_CONSTANT))
#define GCALC_CONSTANT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_CONSTANT, GCalcConstantClass))

typedef struct _GCalcConstant GCalcConstant;
typedef struct _GCalcConstantClass GCalcConstantClass;
typedef struct _GCalcConstantPrivate GCalcConstantPrivate;

#define GCALC_TYPE_MATH_DIVISION (gcalc_math_division_get_type ())
#define GCALC_MATH_DIVISION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_DIVISION, GCalcMathDivision))
#define GCALC_IS_MATH_DIVISION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_DIVISION))
#define GCALC_MATH_DIVISION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_DIVISION, GCalcMathDivisionIface))

typedef struct _GCalcMathDivision GCalcMathDivision;
typedef struct _GCalcMathDivisionIface GCalcMathDivisionIface;

#define GCALC_TYPE_DIVISION (gcalc_division_get_type ())
#define GCALC_DIVISION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_DIVISION, GCalcDivision))
#define GCALC_DIVISION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_DIVISION, GCalcDivisionClass))
#define GCALC_IS_DIVISION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_DIVISION))
#define GCALC_IS_DIVISION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_DIVISION))
#define GCALC_DIVISION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_DIVISION, GCalcDivisionClass))

typedef struct _GCalcDivision GCalcDivision;
typedef struct _GCalcDivisionClass GCalcDivisionClass;
typedef struct _GCalcDivisionPrivate GCalcDivisionPrivate;

#define GCALC_TYPE_MATH_EQUATION (gcalc_math_equation_get_type ())
#define GCALC_MATH_EQUATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_EQUATION, GCalcMathEquation))
#define GCALC_IS_MATH_EQUATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_EQUATION))
#define GCALC_MATH_EQUATION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_EQUATION, GCalcMathEquationIface))

typedef struct _GCalcMathEquation GCalcMathEquation;
typedef struct _GCalcMathEquationIface GCalcMathEquationIface;

#define GCALC_TYPE_EXPRESSION_HASH_MAP (gcalc_expression_hash_map_get_type ())
#define GCALC_EXPRESSION_HASH_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_EXPRESSION_HASH_MAP, GCalcExpressionHashMap))
#define GCALC_EXPRESSION_HASH_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_EXPRESSION_HASH_MAP, GCalcExpressionHashMapClass))
#define GCALC_IS_EXPRESSION_HASH_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_EXPRESSION_HASH_MAP))
#define GCALC_IS_EXPRESSION_HASH_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_EXPRESSION_HASH_MAP))
#define GCALC_EXPRESSION_HASH_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_EXPRESSION_HASH_MAP, GCalcExpressionHashMapClass))

typedef struct _GCalcExpressionHashMap GCalcExpressionHashMap;
typedef struct _GCalcExpressionHashMapClass GCalcExpressionHashMapClass;

#define GCALC_TYPE_EQUATION (gcalc_equation_get_type ())
#define GCALC_EQUATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_EQUATION, GCalcEquation))
#define GCALC_EQUATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_EQUATION, GCalcEquationClass))
#define GCALC_IS_EQUATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_EQUATION))
#define GCALC_IS_EQUATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_EQUATION))
#define GCALC_EQUATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_EQUATION, GCalcEquationClass))

typedef struct _GCalcEquation GCalcEquation;
typedef struct _GCalcEquationClass GCalcEquationClass;
typedef struct _GCalcEquationPrivate GCalcEquationPrivate;

#define GCALC_TYPE_MATH_EQUATION_MANAGER (gcalc_math_equation_manager_get_type ())
#define GCALC_MATH_EQUATION_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_EQUATION_MANAGER, GCalcMathEquationManager))
#define GCALC_IS_MATH_EQUATION_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_EQUATION_MANAGER))
#define GCALC_MATH_EQUATION_MANAGER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_EQUATION_MANAGER, GCalcMathEquationManagerIface))

typedef struct _GCalcMathEquationManager GCalcMathEquationManager;
typedef struct _GCalcMathEquationManagerIface GCalcMathEquationManagerIface;

#define GCALC_TYPE_MATH_VARIABLE (gcalc_math_variable_get_type ())
#define GCALC_MATH_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_VARIABLE, GCalcMathVariable))
#define GCALC_IS_MATH_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_VARIABLE))
#define GCALC_MATH_VARIABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_VARIABLE, GCalcMathVariableIface))

typedef struct _GCalcMathVariable GCalcMathVariable;
typedef struct _GCalcMathVariableIface GCalcMathVariableIface;

#define GCALC_TYPE_EQUATION_MANAGER (gcalc_equation_manager_get_type ())
#define GCALC_EQUATION_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_EQUATION_MANAGER, GCalcEquationManager))
#define GCALC_EQUATION_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_EQUATION_MANAGER, GCalcEquationManagerClass))
#define GCALC_IS_EQUATION_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_EQUATION_MANAGER))
#define GCALC_IS_EQUATION_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_EQUATION_MANAGER))
#define GCALC_EQUATION_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_EQUATION_MANAGER, GCalcEquationManagerClass))

typedef struct _GCalcEquationManager GCalcEquationManager;
typedef struct _GCalcEquationManagerClass GCalcEquationManagerClass;
typedef struct _GCalcEquationManagerPrivate GCalcEquationManagerPrivate;

#define GCALC_TYPE_MATH_ERROR_RESULT (gcalc_math_error_result_get_type ())
#define GCALC_MATH_ERROR_RESULT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_ERROR_RESULT, GCalcMathErrorResult))
#define GCALC_IS_MATH_ERROR_RESULT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_ERROR_RESULT))
#define GCALC_MATH_ERROR_RESULT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_ERROR_RESULT, GCalcMathErrorResultIface))

typedef struct _GCalcMathErrorResult GCalcMathErrorResult;
typedef struct _GCalcMathErrorResultIface GCalcMathErrorResultIface;

#define GCALC_TYPE_ERROR_RESULT (gcalc_error_result_get_type ())
#define GCALC_ERROR_RESULT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_ERROR_RESULT, GCalcErrorResult))
#define GCALC_ERROR_RESULT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_ERROR_RESULT, GCalcErrorResultClass))
#define GCALC_IS_ERROR_RESULT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_ERROR_RESULT))
#define GCALC_IS_ERROR_RESULT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_ERROR_RESULT))
#define GCALC_ERROR_RESULT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_ERROR_RESULT, GCalcErrorResultClass))

typedef struct _GCalcErrorResult GCalcErrorResult;
typedef struct _GCalcErrorResultClass GCalcErrorResultClass;
typedef struct _GCalcErrorResultPrivate GCalcErrorResultPrivate;

#define GCALC_TYPE_ERROR_EXPRESSION (gcalc_error_expression_get_type ())
#define GCALC_ERROR_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_ERROR_EXPRESSION, GCalcErrorExpression))
#define GCALC_ERROR_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_ERROR_EXPRESSION, GCalcErrorExpressionClass))
#define GCALC_IS_ERROR_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_ERROR_EXPRESSION))
#define GCALC_IS_ERROR_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_ERROR_EXPRESSION))
#define GCALC_ERROR_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_ERROR_EXPRESSION, GCalcErrorExpressionClass))

typedef struct _GCalcErrorExpression GCalcErrorExpression;
typedef struct _GCalcErrorExpressionClass GCalcErrorExpressionClass;
typedef struct _GCalcErrorExpressionPrivate GCalcErrorExpressionPrivate;
typedef struct _GCalcExpressionContainerPrivate GCalcExpressionContainerPrivate;
typedef struct _GCalcExpressionHashMapPrivate GCalcExpressionHashMapPrivate;

#define GCALC_TYPE_MATH_FUNCTION (gcalc_math_function_get_type ())
#define GCALC_MATH_FUNCTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_FUNCTION, GCalcMathFunction))
#define GCALC_IS_MATH_FUNCTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_FUNCTION))
#define GCALC_MATH_FUNCTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_FUNCTION, GCalcMathFunctionIface))

typedef struct _GCalcMathFunction GCalcMathFunction;
typedef struct _GCalcMathFunctionIface GCalcMathFunctionIface;

#define GCALC_TYPE_HASHABLE (gcalc_hashable_get_type ())
#define GCALC_HASHABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_HASHABLE, GCalcHashable))
#define GCALC_IS_HASHABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_HASHABLE))
#define GCALC_HASHABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_HASHABLE, GCalcHashableIface))

typedef struct _GCalcHashable GCalcHashable;
typedef struct _GCalcHashableIface GCalcHashableIface;

#define GCALC_TYPE_FUNCTION (gcalc_function_get_type ())
#define GCALC_FUNCTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION, GCalcFunction))
#define GCALC_FUNCTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION, GCalcFunctionClass))
#define GCALC_IS_FUNCTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION))
#define GCALC_IS_FUNCTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION))
#define GCALC_FUNCTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION, GCalcFunctionClass))

typedef struct _GCalcFunction GCalcFunction;
typedef struct _GCalcFunctionClass GCalcFunctionClass;
typedef struct _GCalcFunctionPrivate GCalcFunctionPrivate;

#define GCALC_TYPE_FUNCTION_ACOS (gcalc_function_acos_get_type ())
#define GCALC_FUNCTION_ACOS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_ACOS, GCalcFunctionAcos))
#define GCALC_FUNCTION_ACOS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_ACOS, GCalcFunctionAcosClass))
#define GCALC_IS_FUNCTION_ACOS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_ACOS))
#define GCALC_IS_FUNCTION_ACOS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_ACOS))
#define GCALC_FUNCTION_ACOS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_ACOS, GCalcFunctionAcosClass))

typedef struct _GCalcFunctionAcos GCalcFunctionAcos;
typedef struct _GCalcFunctionAcosClass GCalcFunctionAcosClass;
typedef struct _GCalcFunctionAcosPrivate GCalcFunctionAcosPrivate;

#define GCALC_TYPE_FUNCTION_ACOSH (gcalc_function_acosh_get_type ())
#define GCALC_FUNCTION_ACOSH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_ACOSH, GCalcFunctionAcosh))
#define GCALC_FUNCTION_ACOSH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_ACOSH, GCalcFunctionAcoshClass))
#define GCALC_IS_FUNCTION_ACOSH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_ACOSH))
#define GCALC_IS_FUNCTION_ACOSH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_ACOSH))
#define GCALC_FUNCTION_ACOSH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_ACOSH, GCalcFunctionAcoshClass))

typedef struct _GCalcFunctionAcosh GCalcFunctionAcosh;
typedef struct _GCalcFunctionAcoshClass GCalcFunctionAcoshClass;
typedef struct _GCalcFunctionAcoshPrivate GCalcFunctionAcoshPrivate;

#define GCALC_TYPE_FUNCTION_ASIN (gcalc_function_asin_get_type ())
#define GCALC_FUNCTION_ASIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_ASIN, GCalcFunctionAsin))
#define GCALC_FUNCTION_ASIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_ASIN, GCalcFunctionAsinClass))
#define GCALC_IS_FUNCTION_ASIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_ASIN))
#define GCALC_IS_FUNCTION_ASIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_ASIN))
#define GCALC_FUNCTION_ASIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_ASIN, GCalcFunctionAsinClass))

typedef struct _GCalcFunctionAsin GCalcFunctionAsin;
typedef struct _GCalcFunctionAsinClass GCalcFunctionAsinClass;
typedef struct _GCalcFunctionAsinPrivate GCalcFunctionAsinPrivate;

#define GCALC_TYPE_FUNCTION_ASINH (gcalc_function_asinh_get_type ())
#define GCALC_FUNCTION_ASINH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_ASINH, GCalcFunctionAsinh))
#define GCALC_FUNCTION_ASINH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_ASINH, GCalcFunctionAsinhClass))
#define GCALC_IS_FUNCTION_ASINH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_ASINH))
#define GCALC_IS_FUNCTION_ASINH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_ASINH))
#define GCALC_FUNCTION_ASINH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_ASINH, GCalcFunctionAsinhClass))

typedef struct _GCalcFunctionAsinh GCalcFunctionAsinh;
typedef struct _GCalcFunctionAsinhClass GCalcFunctionAsinhClass;
typedef struct _GCalcFunctionAsinhPrivate GCalcFunctionAsinhPrivate;

#define GCALC_TYPE_FUNCTION_ATAN (gcalc_function_atan_get_type ())
#define GCALC_FUNCTION_ATAN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_ATAN, GCalcFunctionAtan))
#define GCALC_FUNCTION_ATAN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_ATAN, GCalcFunctionAtanClass))
#define GCALC_IS_FUNCTION_ATAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_ATAN))
#define GCALC_IS_FUNCTION_ATAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_ATAN))
#define GCALC_FUNCTION_ATAN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_ATAN, GCalcFunctionAtanClass))

typedef struct _GCalcFunctionAtan GCalcFunctionAtan;
typedef struct _GCalcFunctionAtanClass GCalcFunctionAtanClass;
typedef struct _GCalcFunctionAtanPrivate GCalcFunctionAtanPrivate;

#define GCALC_TYPE_FUNCTION_ATANH (gcalc_function_atanh_get_type ())
#define GCALC_FUNCTION_ATANH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_ATANH, GCalcFunctionAtanh))
#define GCALC_FUNCTION_ATANH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_ATANH, GCalcFunctionAtanhClass))
#define GCALC_IS_FUNCTION_ATANH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_ATANH))
#define GCALC_IS_FUNCTION_ATANH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_ATANH))
#define GCALC_FUNCTION_ATANH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_ATANH, GCalcFunctionAtanhClass))

typedef struct _GCalcFunctionAtanh GCalcFunctionAtanh;
typedef struct _GCalcFunctionAtanhClass GCalcFunctionAtanhClass;
typedef struct _GCalcFunctionAtanhPrivate GCalcFunctionAtanhPrivate;

#define GCALC_TYPE_FUNCTION_COS (gcalc_function_cos_get_type ())
#define GCALC_FUNCTION_COS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_COS, GCalcFunctionCos))
#define GCALC_FUNCTION_COS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_COS, GCalcFunctionCosClass))
#define GCALC_IS_FUNCTION_COS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_COS))
#define GCALC_IS_FUNCTION_COS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_COS))
#define GCALC_FUNCTION_COS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_COS, GCalcFunctionCosClass))

typedef struct _GCalcFunctionCos GCalcFunctionCos;
typedef struct _GCalcFunctionCosClass GCalcFunctionCosClass;
typedef struct _GCalcFunctionCosPrivate GCalcFunctionCosPrivate;

#define GCALC_TYPE_FUNCTION_COSH (gcalc_function_cosh_get_type ())
#define GCALC_FUNCTION_COSH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_COSH, GCalcFunctionCosh))
#define GCALC_FUNCTION_COSH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_COSH, GCalcFunctionCoshClass))
#define GCALC_IS_FUNCTION_COSH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_COSH))
#define GCALC_IS_FUNCTION_COSH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_COSH))
#define GCALC_FUNCTION_COSH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_COSH, GCalcFunctionCoshClass))

typedef struct _GCalcFunctionCosh GCalcFunctionCosh;
typedef struct _GCalcFunctionCoshClass GCalcFunctionCoshClass;
typedef struct _GCalcFunctionCoshPrivate GCalcFunctionCoshPrivate;

#define GCALC_TYPE_FUNCTION_EXP (gcalc_function_exp_get_type ())
#define GCALC_FUNCTION_EXP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_EXP, GCalcFunctionExp))
#define GCALC_FUNCTION_EXP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_EXP, GCalcFunctionExpClass))
#define GCALC_IS_FUNCTION_EXP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_EXP))
#define GCALC_IS_FUNCTION_EXP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_EXP))
#define GCALC_FUNCTION_EXP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_EXP, GCalcFunctionExpClass))

typedef struct _GCalcFunctionExp GCalcFunctionExp;
typedef struct _GCalcFunctionExpClass GCalcFunctionExpClass;
typedef struct _GCalcFunctionExpPrivate GCalcFunctionExpPrivate;

#define GCALC_TYPE_FUNCTION_LOG (gcalc_function_log_get_type ())
#define GCALC_FUNCTION_LOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_LOG, GCalcFunctionLog))
#define GCALC_FUNCTION_LOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_LOG, GCalcFunctionLogClass))
#define GCALC_IS_FUNCTION_LOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_LOG))
#define GCALC_IS_FUNCTION_LOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_LOG))
#define GCALC_FUNCTION_LOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_LOG, GCalcFunctionLogClass))

typedef struct _GCalcFunctionLog GCalcFunctionLog;
typedef struct _GCalcFunctionLogClass GCalcFunctionLogClass;
typedef struct _GCalcFunctionLogPrivate GCalcFunctionLogPrivate;

#define GCALC_TYPE_FUNCTION_SIN (gcalc_function_sin_get_type ())
#define GCALC_FUNCTION_SIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_SIN, GCalcFunctionSin))
#define GCALC_FUNCTION_SIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_SIN, GCalcFunctionSinClass))
#define GCALC_IS_FUNCTION_SIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_SIN))
#define GCALC_IS_FUNCTION_SIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_SIN))
#define GCALC_FUNCTION_SIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_SIN, GCalcFunctionSinClass))

typedef struct _GCalcFunctionSin GCalcFunctionSin;
typedef struct _GCalcFunctionSinClass GCalcFunctionSinClass;
typedef struct _GCalcFunctionSinPrivate GCalcFunctionSinPrivate;

#define GCALC_TYPE_FUNCTION_SINH (gcalc_function_sinh_get_type ())
#define GCALC_FUNCTION_SINH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_SINH, GCalcFunctionSinh))
#define GCALC_FUNCTION_SINH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_SINH, GCalcFunctionSinhClass))
#define GCALC_IS_FUNCTION_SINH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_SINH))
#define GCALC_IS_FUNCTION_SINH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_SINH))
#define GCALC_FUNCTION_SINH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_SINH, GCalcFunctionSinhClass))

typedef struct _GCalcFunctionSinh GCalcFunctionSinh;
typedef struct _GCalcFunctionSinhClass GCalcFunctionSinhClass;
typedef struct _GCalcFunctionSinhPrivate GCalcFunctionSinhPrivate;

#define GCALC_TYPE_FUNCTION_SQRT (gcalc_function_sqrt_get_type ())
#define GCALC_FUNCTION_SQRT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_SQRT, GCalcFunctionSqrt))
#define GCALC_FUNCTION_SQRT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_SQRT, GCalcFunctionSqrtClass))
#define GCALC_IS_FUNCTION_SQRT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_SQRT))
#define GCALC_IS_FUNCTION_SQRT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_SQRT))
#define GCALC_FUNCTION_SQRT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_SQRT, GCalcFunctionSqrtClass))

typedef struct _GCalcFunctionSqrt GCalcFunctionSqrt;
typedef struct _GCalcFunctionSqrtClass GCalcFunctionSqrtClass;
typedef struct _GCalcFunctionSqrtPrivate GCalcFunctionSqrtPrivate;

#define GCALC_TYPE_FUNCTION_TAN (gcalc_function_tan_get_type ())
#define GCALC_FUNCTION_TAN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_TAN, GCalcFunctionTan))
#define GCALC_FUNCTION_TAN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_TAN, GCalcFunctionTanClass))
#define GCALC_IS_FUNCTION_TAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_TAN))
#define GCALC_IS_FUNCTION_TAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_TAN))
#define GCALC_FUNCTION_TAN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_TAN, GCalcFunctionTanClass))

typedef struct _GCalcFunctionTan GCalcFunctionTan;
typedef struct _GCalcFunctionTanClass GCalcFunctionTanClass;
typedef struct _GCalcFunctionTanPrivate GCalcFunctionTanPrivate;

#define GCALC_TYPE_FUNCTION_TANH (gcalc_function_tanh_get_type ())
#define GCALC_FUNCTION_TANH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_FUNCTION_TANH, GCalcFunctionTanh))
#define GCALC_FUNCTION_TANH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_FUNCTION_TANH, GCalcFunctionTanhClass))
#define GCALC_IS_FUNCTION_TANH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_FUNCTION_TANH))
#define GCALC_IS_FUNCTION_TANH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_FUNCTION_TANH))
#define GCALC_FUNCTION_TANH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_FUNCTION_TANH, GCalcFunctionTanhClass))

typedef struct _GCalcFunctionTanh GCalcFunctionTanh;
typedef struct _GCalcFunctionTanhClass GCalcFunctionTanhClass;
typedef struct _GCalcFunctionTanhPrivate GCalcFunctionTanhPrivate;

#define GCALC_TYPE_MATH_GROUP (gcalc_math_group_get_type ())
#define GCALC_MATH_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_GROUP, GCalcMathGroup))
#define GCALC_IS_MATH_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_GROUP))
#define GCALC_MATH_GROUP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_GROUP, GCalcMathGroupIface))

typedef struct _GCalcMathGroup GCalcMathGroup;
typedef struct _GCalcMathGroupIface GCalcMathGroupIface;
typedef enum  {
	GCALC_MATH_GROUP_LEVEL_ONE,
	GCALC_MATH_GROUP_LEVEL_TWO,
	GCALC_MATH_GROUP_LEVEL_THREE
} GCalcMathGroupLevel;

#define GCALC_MATH_GROUP_TYPE_LEVEL (gcalc_math_group_level_get_type ())

#define GCALC_TYPE_GROUP (gcalc_group_get_type ())
#define GCALC_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_GROUP, GCalcGroup))
#define GCALC_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_GROUP, GCalcGroupClass))
#define GCALC_IS_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_GROUP))
#define GCALC_IS_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_GROUP))
#define GCALC_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_GROUP, GCalcGroupClass))

typedef struct _GCalcGroup GCalcGroup;
typedef struct _GCalcGroupClass GCalcGroupClass;
typedef struct _GCalcGroupPrivate GCalcGroupPrivate;

#define GCALC_TYPE_MATH_MINUS (gcalc_math_minus_get_type ())
#define GCALC_MATH_MINUS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_MINUS, GCalcMathMinus))
#define GCALC_IS_MATH_MINUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_MINUS))
#define GCALC_MATH_MINUS_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_MINUS, GCalcMathMinusIface))

typedef struct _GCalcMathMinus GCalcMathMinus;
typedef struct _GCalcMathMinusIface GCalcMathMinusIface;

#define GCALC_TYPE_MATH_MULTIPLY (gcalc_math_multiply_get_type ())
#define GCALC_MATH_MULTIPLY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_MULTIPLY, GCalcMathMultiply))
#define GCALC_IS_MATH_MULTIPLY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_MULTIPLY))
#define GCALC_MATH_MULTIPLY_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_MULTIPLY, GCalcMathMultiplyIface))

typedef struct _GCalcMathMultiply GCalcMathMultiply;
typedef struct _GCalcMathMultiplyIface GCalcMathMultiplyIface;

#define GCALC_TYPE_MATH_PARAMETER (gcalc_math_parameter_get_type ())
#define GCALC_MATH_PARAMETER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_PARAMETER, GCalcMathParameter))
#define GCALC_IS_MATH_PARAMETER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_PARAMETER))
#define GCALC_MATH_PARAMETER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_PARAMETER, GCalcMathParameterIface))

typedef struct _GCalcMathParameter GCalcMathParameter;
typedef struct _GCalcMathParameterIface GCalcMathParameterIface;

#define GCALC_TYPE_MATH_PLUS (gcalc_math_plus_get_type ())
#define GCALC_MATH_PLUS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_PLUS, GCalcMathPlus))
#define GCALC_IS_MATH_PLUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_PLUS))
#define GCALC_MATH_PLUS_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_PLUS, GCalcMathPlusIface))

typedef struct _GCalcMathPlus GCalcMathPlus;
typedef struct _GCalcMathPlusIface GCalcMathPlusIface;

#define GCALC_TYPE_MATH_POLYNOMIAL (gcalc_math_polynomial_get_type ())
#define GCALC_MATH_POLYNOMIAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_POLYNOMIAL, GCalcMathPolynomial))
#define GCALC_IS_MATH_POLYNOMIAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_POLYNOMIAL))
#define GCALC_MATH_POLYNOMIAL_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_POLYNOMIAL, GCalcMathPolynomialIface))

typedef struct _GCalcMathPolynomial GCalcMathPolynomial;
typedef struct _GCalcMathPolynomialIface GCalcMathPolynomialIface;

#define GCALC_TYPE_MATH_POW (gcalc_math_pow_get_type ())
#define GCALC_MATH_POW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_POW, GCalcMathPow))
#define GCALC_IS_MATH_POW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_POW))
#define GCALC_MATH_POW_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_POW, GCalcMathPowIface))

typedef struct _GCalcMathPow GCalcMathPow;
typedef struct _GCalcMathPowIface GCalcMathPowIface;

#define GCALC_TYPE_MATH_TERM (gcalc_math_term_get_type ())
#define GCALC_MATH_TERM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MATH_TERM, GCalcMathTerm))
#define GCALC_IS_MATH_TERM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MATH_TERM))
#define GCALC_MATH_TERM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCALC_TYPE_MATH_TERM, GCalcMathTermIface))

typedef struct _GCalcMathTerm GCalcMathTerm;
typedef struct _GCalcMathTermIface GCalcMathTermIface;

#define GCALC_TYPE_MINUS (gcalc_minus_get_type ())
#define GCALC_MINUS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MINUS, GCalcMinus))
#define GCALC_MINUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_MINUS, GCalcMinusClass))
#define GCALC_IS_MINUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MINUS))
#define GCALC_IS_MINUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_MINUS))
#define GCALC_MINUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_MINUS, GCalcMinusClass))

typedef struct _GCalcMinus GCalcMinus;
typedef struct _GCalcMinusClass GCalcMinusClass;
typedef struct _GCalcMinusPrivate GCalcMinusPrivate;

#define GCALC_TYPE_MULTIPLY (gcalc_multiply_get_type ())
#define GCALC_MULTIPLY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_MULTIPLY, GCalcMultiply))
#define GCALC_MULTIPLY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_MULTIPLY, GCalcMultiplyClass))
#define GCALC_IS_MULTIPLY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_MULTIPLY))
#define GCALC_IS_MULTIPLY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_MULTIPLY))
#define GCALC_MULTIPLY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_MULTIPLY, GCalcMultiplyClass))

typedef struct _GCalcMultiply GCalcMultiply;
typedef struct _GCalcMultiplyClass GCalcMultiplyClass;
typedef struct _GCalcMultiplyPrivate GCalcMultiplyPrivate;

#define GCALC_TYPE_VARIABLE (gcalc_variable_get_type ())
#define GCALC_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_VARIABLE, GCalcVariable))
#define GCALC_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_VARIABLE, GCalcVariableClass))
#define GCALC_IS_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_VARIABLE))
#define GCALC_IS_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_VARIABLE))
#define GCALC_VARIABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_VARIABLE, GCalcVariableClass))

typedef struct _GCalcVariable GCalcVariable;
typedef struct _GCalcVariableClass GCalcVariableClass;
typedef struct _GCalcVariablePrivate GCalcVariablePrivate;

#define GCALC_TYPE_PARAMETER (gcalc_parameter_get_type ())
#define GCALC_PARAMETER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_PARAMETER, GCalcParameter))
#define GCALC_PARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_PARAMETER, GCalcParameterClass))
#define GCALC_IS_PARAMETER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_PARAMETER))
#define GCALC_IS_PARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_PARAMETER))
#define GCALC_PARAMETER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_PARAMETER, GCalcParameterClass))

typedef struct _GCalcParameter GCalcParameter;
typedef struct _GCalcParameterClass GCalcParameterClass;
typedef struct _GCalcParameterPrivate GCalcParameterPrivate;

#define GCALC_TYPE_PARSER (gcalc_parser_get_type ())
#define GCALC_PARSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_PARSER, GCalcParser))
#define GCALC_PARSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_PARSER, GCalcParserClass))
#define GCALC_IS_PARSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_PARSER))
#define GCALC_IS_PARSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_PARSER))
#define GCALC_PARSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_PARSER, GCalcParserClass))

typedef struct _GCalcParser GCalcParser;
typedef struct _GCalcParserClass GCalcParserClass;
typedef struct _GCalcParserPrivate GCalcParserPrivate;
typedef enum  {
	GCALC_PARSER_TOKEN_TYPE_NONE,
	GCALC_PARSER_TOKEN_TYPE_EOF,
	GCALC_PARSER_TOKEN_TYPE_IDENTIFIER,
	GCALC_PARSER_TOKEN_TYPE_INTEGER_LITERAL,
	GCALC_PARSER_TOKEN_TYPE_REAL_LITERAL,
	GCALC_PARSER_TOKEN_TYPE_STAR,
	GCALC_PARSER_TOKEN_TYPE_PLUS,
	GCALC_PARSER_TOKEN_TYPE_DIV,
	GCALC_PARSER_TOKEN_TYPE_MINUS,
	GCALC_PARSER_TOKEN_TYPE_ASSIGN,
	GCALC_PARSER_TOKEN_TYPE_OPEN_PARENS,
	GCALC_PARSER_TOKEN_TYPE_CLOSE_PARENS,
	GCALC_PARSER_TOKEN_TYPE_CARRET,
	GCALC_PARSER_TOKEN_TYPE_CLOSE_BRACE,
	GCALC_PARSER_TOKEN_TYPE_CLOSE_BRACKET,
	GCALC_PARSER_TOKEN_TYPE_OPEN_BRACE,
	GCALC_PARSER_TOKEN_TYPE_OPEN_BRACKET,
	GCALC_PARSER_TOKEN_TYPE_STRING_LITERAL,
	GCALC_PARSER_TOKEN_TYPE_OP_AND,
	GCALC_PARSER_TOKEN_TYPE_OP_COALESCING,
	GCALC_PARSER_TOKEN_TYPE_OP_DEC,
	GCALC_PARSER_TOKEN_TYPE_OP_EQ,
	GCALC_PARSER_TOKEN_TYPE_OP_GE,
	GCALC_PARSER_TOKEN_TYPE_OP_GT,
	GCALC_PARSER_TOKEN_TYPE_OP_INC,
	GCALC_PARSER_TOKEN_TYPE_OP_LE,
	GCALC_PARSER_TOKEN_TYPE_OP_LT,
	GCALC_PARSER_TOKEN_TYPE_OP_NE,
	GCALC_PARSER_TOKEN_TYPE_OP_NEG,
	GCALC_PARSER_TOKEN_TYPE_OP_OR,
	GCALC_PARSER_TOKEN_TYPE_OP_PTR,
	GCALC_PARSER_TOKEN_TYPE_OP_SHIFT_LEFT,
	GCALC_PARSER_TOKEN_TYPE_SEMICOLON,
	GCALC_PARSER_TOKEN_TYPE_TILDE,
	GCALC_PARSER_TOKEN_TYPE_COLON,
	GCALC_PARSER_TOKEN_TYPE_COMMA,
	GCALC_PARSER_TOKEN_TYPE_DOUBLE_COLON,
	GCALC_PARSER_TOKEN_TYPE_DOT,
	GCALC_PARSER_TOKEN_TYPE_ELLIPSIS,
	GCALC_PARSER_TOKEN_TYPE_INTERR,
	GCALC_PARSER_TOKEN_TYPE_HASH,
	GCALC_PARSER_TOKEN_TYPE_CURRENCY_SYMBOL
} GCalcParserTokenType;

#define GCALC_PARSER_TYPE_TOKEN_TYPE (gcalc_parser_token_type_get_type ())

#define GCALC_TYPE_PLUS (gcalc_plus_get_type ())
#define GCALC_PLUS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_PLUS, GCalcPlus))
#define GCALC_PLUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_PLUS, GCalcPlusClass))
#define GCALC_IS_PLUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_PLUS))
#define GCALC_IS_PLUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_PLUS))
#define GCALC_PLUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_PLUS, GCalcPlusClass))

typedef struct _GCalcPlus GCalcPlus;
typedef struct _GCalcPlusClass GCalcPlusClass;
typedef struct _GCalcPlusPrivate GCalcPlusPrivate;

#define GCALC_TYPE_POLYNOMIAL (gcalc_polynomial_get_type ())
#define GCALC_POLYNOMIAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_POLYNOMIAL, GCalcPolynomial))
#define GCALC_POLYNOMIAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_POLYNOMIAL, GCalcPolynomialClass))
#define GCALC_IS_POLYNOMIAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_POLYNOMIAL))
#define GCALC_IS_POLYNOMIAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_POLYNOMIAL))
#define GCALC_POLYNOMIAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_POLYNOMIAL, GCalcPolynomialClass))

typedef struct _GCalcPolynomial GCalcPolynomial;
typedef struct _GCalcPolynomialClass GCalcPolynomialClass;
typedef struct _GCalcPolynomialPrivate GCalcPolynomialPrivate;

#define GCALC_TYPE_POW (gcalc_pow_get_type ())
#define GCALC_POW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_POW, GCalcPow))
#define GCALC_POW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_POW, GCalcPowClass))
#define GCALC_IS_POW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_POW))
#define GCALC_IS_POW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_POW))
#define GCALC_POW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_POW, GCalcPowClass))

typedef struct _GCalcPow GCalcPow;
typedef struct _GCalcPowClass GCalcPowClass;
typedef struct _GCalcPowPrivate GCalcPowPrivate;

#define GCALC_TYPE_RESULT (gcalc_result_get_type ())
#define GCALC_RESULT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_RESULT, GCalcResult))
#define GCALC_RESULT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_RESULT, GCalcResultClass))
#define GCALC_IS_RESULT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_RESULT))
#define GCALC_IS_RESULT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_RESULT))
#define GCALC_RESULT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_RESULT, GCalcResultClass))

typedef struct _GCalcResult GCalcResult;
typedef struct _GCalcResultClass GCalcResultClass;
typedef struct _GCalcResultPrivate GCalcResultPrivate;

#define GCALC_TYPE_SOLVER (gcalc_solver_get_type ())
#define GCALC_SOLVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_SOLVER, GCalcSolver))
#define GCALC_SOLVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_SOLVER, GCalcSolverClass))
#define GCALC_IS_SOLVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_SOLVER))
#define GCALC_IS_SOLVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_SOLVER))
#define GCALC_SOLVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_SOLVER, GCalcSolverClass))

typedef struct _GCalcSolver GCalcSolver;
typedef struct _GCalcSolverClass GCalcSolverClass;
typedef struct _GCalcSolverPrivate GCalcSolverPrivate;

#define GCALC_TYPE_TERM (gcalc_term_get_type ())
#define GCALC_TERM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCALC_TYPE_TERM, GCalcTerm))
#define GCALC_TERM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCALC_TYPE_TERM, GCalcTermClass))
#define GCALC_IS_TERM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCALC_TYPE_TERM))
#define GCALC_IS_TERM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCALC_TYPE_TERM))
#define GCALC_TERM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCALC_TYPE_TERM, GCalcTermClass))

typedef struct _GCalcTerm GCalcTerm;
typedef struct _GCalcTermClass GCalcTermClass;
typedef struct _GCalcTermPrivate GCalcTermPrivate;

struct _GCalcMathResultIface {
	GTypeInterface parent_iface;
	gchar* (*to_string) (GCalcMathResult* self);
	GCalcMathExpression* (*get_expression) (GCalcMathResult* self);
};

struct _GCalcMathExpressionIface {
	GTypeInterface parent_iface;
	gchar* (*to_string) (GCalcMathExpression* self);
	GCalcMathResult* (*solve) (GCalcMathExpression* self);
	GCalcMathExpression* (*get_parent) (GCalcMathExpression* self);
	void (*set_parent) (GCalcMathExpression* self, GCalcMathExpression* value);
	GCalcExpressionContainer* (*get_expressions) (GCalcMathExpression* self);
};

struct _GCalcExpression {
	GObject parent_instance;
	GCalcExpressionPrivate * priv;
};

struct _GCalcExpressionClass {
	GObjectClass parent_class;
	gchar* (*to_string) (GCalcExpression* self);
	GCalcMathResult* (*solve) (GCalcExpression* self);
};

struct _GCalcMathOperatorIface {
	GTypeInterface parent_iface;
};

struct _GCalcMathBinaryOperatorIface {
	GTypeInterface parent_iface;
};

struct _GCalcMathAssignIface {
	GTypeInterface parent_iface;
};

struct _GCalcAssign {
	GCalcExpression parent_instance;
	GCalcAssignPrivate * priv;
};

struct _GCalcAssignClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcMathConstantIface {
	GTypeInterface parent_iface;
	GCalcMathConstant* (*add) (GCalcMathConstant* self, GCalcMathConstant* c);
	GCalcMathConstant* (*subtract) (GCalcMathConstant* self, GCalcMathConstant* c);
	GCalcMathConstant* (*multiply) (GCalcMathConstant* self, GCalcMathConstant* c);
	GCalcMathConstant* (*divide) (GCalcMathConstant* self, GCalcMathConstant* c);
	GCalcMathConstant* (*neg) (GCalcMathConstant* self);
	GCalcMathConstant* (*pow) (GCalcMathConstant* self, GCalcMathConstant* c);
};

struct _GCalcMathConstantNumberIface {
	GTypeInterface parent_iface;
	gdouble (*value) (GCalcMathConstantNumber* self);
};

struct _GCalcMathConstantComplexIface {
	GTypeInterface parent_iface;
	gdouble (*real) (GCalcMathConstantComplex* self);
	gdouble (*imag) (GCalcMathConstantComplex* self);
	void (*zero) (GCalcMathConstantComplex* self);
};

struct _GCalcConstant {
	GCalcExpression parent_instance;
	GCalcConstantPrivate * priv;
};

struct _GCalcConstantClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcMathDivisionIface {
	GTypeInterface parent_iface;
};

struct _GCalcDivision {
	GCalcExpression parent_instance;
	GCalcDivisionPrivate * priv;
};

struct _GCalcDivisionClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcMathEquationIface {
	GTypeInterface parent_iface;
	GCalcExpressionHashMap* (*get_variables) (GCalcMathEquation* self);
};

struct _GCalcEquation {
	GCalcExpression parent_instance;
	GCalcEquationPrivate * priv;
};

struct _GCalcEquationClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcMathVariableIface {
	GTypeInterface parent_iface;
	GCalcMathExpression* (*evaluate) (GCalcMathVariable* self, GError** error);
	const gchar* (*get_name) (GCalcMathVariable* self);
	void (*set_name) (GCalcMathVariable* self, const gchar* value);
	GCalcMathConstant* (*get_value) (GCalcMathVariable* self);
	void (*set_value) (GCalcMathVariable* self, GCalcMathConstant* value);
	GCalcMathVariable* (*get_bind) (GCalcMathVariable* self);
	void (*set_bind) (GCalcMathVariable* self, GCalcMathVariable* value);
	gboolean (*get_binded) (GCalcMathVariable* self);
};

struct _GCalcMathEquationManagerIface {
	GTypeInterface parent_iface;
	GCalcMathVariable* (*find_variable) (GCalcMathEquationManager* self, const gchar* name);
	GCalcExpressionContainer* (*get_equations) (GCalcMathEquationManager* self);
	GCalcExpressionContainer* (*get_functions) (GCalcMathEquationManager* self);
};

struct _GCalcEquationManager {
	GObject parent_instance;
	GCalcEquationManagerPrivate * priv;
};

struct _GCalcEquationManagerClass {
	GObjectClass parent_class;
};

struct _GCalcMathErrorResultIface {
	GTypeInterface parent_iface;
	const gchar* (*get_message) (GCalcMathErrorResult* self);
};

struct _GCalcErrorResult {
	GObject parent_instance;
	GCalcErrorResultPrivate * priv;
};

struct _GCalcErrorResultClass {
	GObjectClass parent_class;
};

struct _GCalcErrorExpression {
	GCalcExpression parent_instance;
	GCalcErrorExpressionPrivate * priv;
};

struct _GCalcErrorExpressionClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcExpressionContainer {
	GeeArrayList parent_instance;
	GCalcExpressionContainerPrivate * priv;
};

struct _GCalcExpressionContainerClass {
	GeeArrayListClass parent_class;
};

struct _GCalcExpressionHashMap {
	GeeHashMap parent_instance;
	GCalcExpressionHashMapPrivate * priv;
};

struct _GCalcExpressionHashMapClass {
	GeeHashMapClass parent_class;
};

struct _GCalcMathFunctionIface {
	GTypeInterface parent_iface;
	GCalcMathExpression* (*evaluate) (GCalcMathFunction* self, GError** error);
	gboolean (*verify_params) (GCalcMathFunction* self, GError** error);
	GCalcExpressionContainer* (*get_param_types) (GCalcMathFunction* self);
	const gchar* (*get_name) (GCalcMathFunction* self);
	void (*set_name) (GCalcMathFunction* self, const gchar* value);
	guint (*get_n_params) (GCalcMathFunction* self);
	void (*set_n_params) (GCalcMathFunction* self, guint value);
	gboolean (*get_closed) (GCalcMathFunction* self);
	void (*set_closed) (GCalcMathFunction* self, gboolean value);
};

struct _GCalcHashableIface {
	GTypeInterface parent_iface;
	guint (*hash) (GCalcHashable* self);
};

struct _GCalcFunction {
	GCalcExpression parent_instance;
	GCalcFunctionPrivate * priv;
};

struct _GCalcFunctionClass {
	GCalcExpressionClass parent_class;
	GCalcMathExpression* (*evaluate) (GCalcFunction* self, GError** error);
};

struct _GCalcFunctionAcos {
	GCalcFunction parent_instance;
	GCalcFunctionAcosPrivate * priv;
};

struct _GCalcFunctionAcosClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionAcosh {
	GCalcFunction parent_instance;
	GCalcFunctionAcoshPrivate * priv;
};

struct _GCalcFunctionAcoshClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionAsin {
	GCalcFunction parent_instance;
	GCalcFunctionAsinPrivate * priv;
};

struct _GCalcFunctionAsinClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionAsinh {
	GCalcFunction parent_instance;
	GCalcFunctionAsinhPrivate * priv;
};

struct _GCalcFunctionAsinhClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionAtan {
	GCalcFunction parent_instance;
	GCalcFunctionAtanPrivate * priv;
};

struct _GCalcFunctionAtanClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionAtanh {
	GCalcFunction parent_instance;
	GCalcFunctionAtanhPrivate * priv;
};

struct _GCalcFunctionAtanhClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionCos {
	GCalcFunction parent_instance;
	GCalcFunctionCosPrivate * priv;
};

struct _GCalcFunctionCosClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionCosh {
	GCalcFunction parent_instance;
	GCalcFunctionCoshPrivate * priv;
};

struct _GCalcFunctionCoshClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionExp {
	GCalcFunction parent_instance;
	GCalcFunctionExpPrivate * priv;
};

struct _GCalcFunctionExpClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionLog {
	GCalcFunction parent_instance;
	GCalcFunctionLogPrivate * priv;
};

struct _GCalcFunctionLogClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionSin {
	GCalcFunction parent_instance;
	GCalcFunctionSinPrivate * priv;
};

struct _GCalcFunctionSinClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionSinh {
	GCalcFunction parent_instance;
	GCalcFunctionSinhPrivate * priv;
};

struct _GCalcFunctionSinhClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionSqrt {
	GCalcFunction parent_instance;
	GCalcFunctionSqrtPrivate * priv;
};

struct _GCalcFunctionSqrtClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionTan {
	GCalcFunction parent_instance;
	GCalcFunctionTanPrivate * priv;
};

struct _GCalcFunctionTanClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcFunctionTanh {
	GCalcFunction parent_instance;
	GCalcFunctionTanhPrivate * priv;
};

struct _GCalcFunctionTanhClass {
	GCalcFunctionClass parent_class;
};

struct _GCalcMathGroupIface {
	GTypeInterface parent_iface;
	GCalcMathExpression* (*evaluate) (GCalcMathGroup* self, GError** error);
	GCalcMathGroupLevel (*get_level) (GCalcMathGroup* self);
	void (*set_level) (GCalcMathGroup* self, GCalcMathGroupLevel value);
	gboolean (*get_closed) (GCalcMathGroup* self);
	void (*set_closed) (GCalcMathGroup* self, gboolean value);
};

struct _GCalcGroup {
	GCalcExpression parent_instance;
	GCalcGroupPrivate * priv;
};

struct _GCalcGroupClass {
	GCalcExpressionClass parent_class;
};

typedef enum  {
	GCALC_ASSIG_ERROR_INVALID_STRUCTURE_ERROR
} GCalcAssigError;
#define GCALC_ASSIG_ERROR gcalc_assig_error_quark ()
typedef enum  {
	GCALC_FUNCTION_ERROR_INVALID_PARAMETERS_ERROR,
	GCALC_FUNCTION_ERROR_INVOCATION_ERROR
} GCalcFunctionError;
#define GCALC_FUNCTION_ERROR gcalc_function_error_quark ()
typedef enum  {
	GCALC_GROUP_ERROR_INVALID_POLYNOMIAL,
	GCALC_GROUP_ERROR_INVALID_INTERNAL_TERM
} GCalcGroupError;
#define GCALC_GROUP_ERROR gcalc_group_error_quark ()
struct _GCalcMathMinusIface {
	GTypeInterface parent_iface;
};

struct _GCalcMathMultiplyIface {
	GTypeInterface parent_iface;
};

struct _GCalcMathParameterIface {
	GTypeInterface parent_iface;
	void (*set_value) (GCalcMathParameter* self, GValue* val, GError** error);
	GValue* (*get_value) (GCalcMathParameter* self);
};

struct _GCalcMathPlusIface {
	GTypeInterface parent_iface;
};

struct _GCalcMathPolynomialIface {
	GTypeInterface parent_iface;
	GCalcMathExpression* (*evaluate) (GCalcMathPolynomial* self, GError** error);
};

struct _GCalcMathPowIface {
	GTypeInterface parent_iface;
};

struct _GCalcMathTermIface {
	GTypeInterface parent_iface;
	GCalcMathExpression* (*add) (GCalcMathTerm* self, GCalcMathTerm* t, GError** error);
	GCalcMathExpression* (*evaluate) (GCalcMathTerm* self, GError** error);
};

typedef enum  {
	GCALC_TERM_ERROR_INVALID_OPERATOR,
	GCALC_TERM_ERROR_EVALUATION_FAIL
} GCalcTermError;
#define GCALC_TERM_ERROR gcalc_term_error_quark ()
typedef enum  {
	GCALC_VARIABLE_ERROR_INVALID_PARENT,
	GCALC_VARIABLE_ERROR_INVALID_EXPRESSION_DEFINITION,
	GCALC_VARIABLE_ERROR_EVALUATION_FAIL
} GCalcVariableError;
#define GCALC_VARIABLE_ERROR gcalc_variable_error_quark ()
struct _GCalcMinus {
	GCalcExpression parent_instance;
	GCalcMinusPrivate * priv;
};

struct _GCalcMinusClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcMultiply {
	GCalcExpression parent_instance;
	GCalcMultiplyPrivate * priv;
};

struct _GCalcMultiplyClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcVariable {
	GCalcExpression parent_instance;
	GCalcVariablePrivate * priv;
};

struct _GCalcVariableClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcParameter {
	GCalcVariable parent_instance;
	GCalcParameterPrivate * priv;
};

struct _GCalcParameterClass {
	GCalcVariableClass parent_class;
};

struct _GCalcParser {
	GObject parent_instance;
	GCalcParserPrivate * priv;
};

struct _GCalcParserClass {
	GObjectClass parent_class;
};

typedef enum  {
	GCALC_PARSER_ERROR_INVALID_TOKEN_ERROR,
	GCALC_PARSER_ERROR_INVALID_EXPRESSION_ERROR
} GCalcParserError;
#define GCALC_PARSER_ERROR gcalc_parser_error_quark ()
struct _GCalcPlus {
	GCalcExpression parent_instance;
	GCalcPlusPrivate * priv;
};

struct _GCalcPlusClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcPolynomial {
	GCalcExpression parent_instance;
	GCalcPolynomialPrivate * priv;
};

struct _GCalcPolynomialClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcPow {
	GCalcExpression parent_instance;
	GCalcPowPrivate * priv;
};

struct _GCalcPowClass {
	GCalcExpressionClass parent_class;
};

struct _GCalcResult {
	GObject parent_instance;
	GCalcResultPrivate * priv;
};

struct _GCalcResultClass {
	GObjectClass parent_class;
};

struct _GCalcSolver {
	GObject parent_instance;
	GCalcSolverPrivate * priv;
};

struct _GCalcSolverClass {
	GObjectClass parent_class;
};

typedef enum  {
	GCALC_SOLVER_ERROR_EXPRESSION_ERROR
} GCalcSolverError;
#define GCALC_SOLVER_ERROR gcalc_solver_error_quark ()
struct _GCalcTerm {
	GCalcExpression parent_instance;
	GCalcTermPrivate * priv;
};

struct _GCalcTermClass {
	GCalcExpressionClass parent_class;
};

GType gcalc_math_result_get_type (void) G_GNUC_CONST;
GType gcalc_expression_container_get_type (void) G_GNUC_CONST;
GType gcalc_math_expression_get_type (void) G_GNUC_CONST;
GType gcalc_expression_get_type (void) G_GNUC_CONST;
GType gcalc_math_operator_get_type (void) G_GNUC_CONST;
GType gcalc_math_binary_operator_get_type (void) G_GNUC_CONST;
GType gcalc_math_assign_get_type (void) G_GNUC_CONST;
GType gcalc_assign_get_type (void) G_GNUC_CONST;
GCalcAssign* gcalc_assign_new (void);
GCalcAssign* gcalc_assign_construct (GType object_type);
GType gcalc_math_constant_get_type (void) G_GNUC_CONST;
GType gcalc_math_constant_number_get_type (void) G_GNUC_CONST;
GType gcalc_math_constant_complex_get_type (void) G_GNUC_CONST;
GType gcalc_constant_get_type (void) G_GNUC_CONST;
GCalcConstant* gcalc_constant_new_integer (gint val);
GCalcConstant* gcalc_constant_construct_integer (GType object_type,
                                                 gint val);
GCalcConstant* gcalc_constant_new_unsigned_integer (guint val);
GCalcConstant* gcalc_constant_construct_unsigned_integer (GType object_type,
                                                          guint val);
GCalcConstant* gcalc_constant_new_double (gdouble val);
GCalcConstant* gcalc_constant_construct_double (GType object_type,
                                                gdouble val);
GCalcConstant* gcalc_constant_new_complex (gdouble real,
                                           gdouble imag);
GCalcConstant* gcalc_constant_construct_complex (GType object_type,
                                                 gdouble real,
                                                 gdouble imag);
GCalcConstant* gcalc_constant_new (void);
GCalcConstant* gcalc_constant_construct (GType object_type);
GType gcalc_math_division_get_type (void) G_GNUC_CONST;
GType gcalc_division_get_type (void) G_GNUC_CONST;
GCalcDivision* gcalc_division_new (void);
GCalcDivision* gcalc_division_construct (GType object_type);
GType gcalc_expression_hash_map_get_type (void) G_GNUC_CONST;
GType gcalc_math_equation_get_type (void) G_GNUC_CONST;
GType gcalc_equation_get_type (void) G_GNUC_CONST;
GCalcEquation* gcalc_equation_new (void);
GCalcEquation* gcalc_equation_construct (GType object_type);
GType gcalc_math_variable_get_type (void) G_GNUC_CONST;
GType gcalc_math_equation_manager_get_type (void) G_GNUC_CONST;
GType gcalc_equation_manager_get_type (void) G_GNUC_CONST;
GCalcEquationManager* gcalc_equation_manager_new (void);
GCalcEquationManager* gcalc_equation_manager_construct (GType object_type);
GType gcalc_math_error_result_get_type (void) G_GNUC_CONST;
GType gcalc_error_result_get_type (void) G_GNUC_CONST;
GCalcErrorResult* gcalc_error_result_new (const gchar* msg);
GCalcErrorResult* gcalc_error_result_construct (GType object_type,
                                                const gchar* msg);
GCalcExpression* gcalc_expression_new (void);
GCalcExpression* gcalc_expression_construct (GType object_type);
GType gcalc_error_expression_get_type (void) G_GNUC_CONST;
GCalcErrorExpression* gcalc_error_expression_new (void);
GCalcErrorExpression* gcalc_error_expression_construct (GType object_type);
GObject* gcalc_expression_container_get_object (GCalcExpressionContainer* self,
                                                guint position);
GCalcMathExpression* gcalc_expression_container_find (GCalcExpressionContainer* self,
                                                      GCalcMathExpression* exp);
GCalcMathExpression* gcalc_expression_container_find_named (GCalcExpressionContainer* self,
                                                            const gchar* name);
GCalcExpressionContainer* gcalc_expression_container_new (void);
GCalcExpressionContainer* gcalc_expression_container_construct (GType object_type);
GCalcMathExpression* gcalc_expression_container_get_parent (GCalcExpressionContainer* self);
void gcalc_expression_container_set_parent (GCalcExpressionContainer* self,
                                            GCalcMathExpression* value);
void gcalc_expression_hash_map_add (GCalcExpressionHashMap* self,
                                    GCalcMathExpression* exp);
void gcalc_expression_hash_map_remove (GCalcExpressionHashMap* self,
                                       GCalcMathExpression* exp);
GCalcMathExpression* gcalc_expression_hash_map_find_named (GCalcExpressionHashMap* self,
                                                           const gchar* name);
GCalcExpressionHashMap* gcalc_expression_hash_map_new (void);
GCalcExpressionHashMap* gcalc_expression_hash_map_construct (GType object_type);
GCalcMathExpression* gcalc_expression_hash_map_get_parent (GCalcExpressionHashMap* self);
void gcalc_expression_hash_map_set_parent (GCalcExpressionHashMap* self,
                                           GCalcMathExpression* value);
GType gcalc_math_function_get_type (void) G_GNUC_CONST;
GType gcalc_hashable_get_type (void) G_GNUC_CONST;
GType gcalc_function_get_type (void) G_GNUC_CONST;
GCalcFunction* gcalc_function_new_with_name (const gchar* name,
                                             gint nparams);
GCalcFunction* gcalc_function_construct_with_name (GType object_type,
                                                   const gchar* name,
                                                   gint nparams);
GCalcFunction* gcalc_function_new (void);
GCalcFunction* gcalc_function_construct (GType object_type);
GType gcalc_function_acos_get_type (void) G_GNUC_CONST;
GCalcFunctionAcos* gcalc_function_acos_new (void);
GCalcFunctionAcos* gcalc_function_acos_construct (GType object_type);
GType gcalc_function_acosh_get_type (void) G_GNUC_CONST;
GCalcFunctionAcosh* gcalc_function_acosh_new (void);
GCalcFunctionAcosh* gcalc_function_acosh_construct (GType object_type);
GType gcalc_function_asin_get_type (void) G_GNUC_CONST;
GCalcFunctionAsin* gcalc_function_asin_new (void);
GCalcFunctionAsin* gcalc_function_asin_construct (GType object_type);
GType gcalc_function_asinh_get_type (void) G_GNUC_CONST;
GCalcFunctionAsinh* gcalc_function_asinh_new (void);
GCalcFunctionAsinh* gcalc_function_asinh_construct (GType object_type);
GType gcalc_function_atan_get_type (void) G_GNUC_CONST;
GCalcFunctionAtan* gcalc_function_atan_new (void);
GCalcFunctionAtan* gcalc_function_atan_construct (GType object_type);
GType gcalc_function_atanh_get_type (void) G_GNUC_CONST;
GCalcFunctionAtanh* gcalc_function_atanh_new (void);
GCalcFunctionAtanh* gcalc_function_atanh_construct (GType object_type);
GType gcalc_function_cos_get_type (void) G_GNUC_CONST;
GCalcFunctionCos* gcalc_function_cos_new (void);
GCalcFunctionCos* gcalc_function_cos_construct (GType object_type);
GType gcalc_function_cosh_get_type (void) G_GNUC_CONST;
GCalcFunctionCosh* gcalc_function_cosh_new (void);
GCalcFunctionCosh* gcalc_function_cosh_construct (GType object_type);
GType gcalc_function_exp_get_type (void) G_GNUC_CONST;
GCalcFunctionExp* gcalc_function_exp_new (void);
GCalcFunctionExp* gcalc_function_exp_construct (GType object_type);
GType gcalc_function_log_get_type (void) G_GNUC_CONST;
GCalcFunctionLog* gcalc_function_log_new (void);
GCalcFunctionLog* gcalc_function_log_construct (GType object_type);
GType gcalc_function_sin_get_type (void) G_GNUC_CONST;
GCalcFunctionSin* gcalc_function_sin_new (void);
GCalcFunctionSin* gcalc_function_sin_construct (GType object_type);
GType gcalc_function_sinh_get_type (void) G_GNUC_CONST;
GCalcFunctionSinh* gcalc_function_sinh_new (void);
GCalcFunctionSinh* gcalc_function_sinh_construct (GType object_type);
GType gcalc_function_sqrt_get_type (void) G_GNUC_CONST;
GCalcFunctionSqrt* gcalc_function_sqrt_new (void);
GCalcFunctionSqrt* gcalc_function_sqrt_construct (GType object_type);
GType gcalc_function_tan_get_type (void) G_GNUC_CONST;
GCalcFunctionTan* gcalc_function_tan_new (void);
GCalcFunctionTan* gcalc_function_tan_construct (GType object_type);
GType gcalc_function_tanh_get_type (void) G_GNUC_CONST;
GCalcFunctionTanh* gcalc_function_tanh_new (void);
GCalcFunctionTanh* gcalc_function_tanh_construct (GType object_type);
GType gcalc_math_group_level_get_type (void) G_GNUC_CONST;
GType gcalc_math_group_get_type (void) G_GNUC_CONST;
GType gcalc_group_get_type (void) G_GNUC_CONST;
GCalcGroup* gcalc_group_new (void);
GCalcGroup* gcalc_group_construct (GType object_type);
guint gcalc_hashable_hash (GCalcHashable* self);
GCalcMathExpression* gcalc_math_assign_evaluate (GCalcMathAssign* self,
                                                 GError** error);
GQuark gcalc_assig_error_quark (void);
GCalcMathConstant* gcalc_math_constant_add (GCalcMathConstant* self,
                                            GCalcMathConstant* c);
GCalcMathConstant* gcalc_math_constant_subtract (GCalcMathConstant* self,
                                                 GCalcMathConstant* c);
GCalcMathConstant* gcalc_math_constant_multiply (GCalcMathConstant* self,
                                                 GCalcMathConstant* c);
GCalcMathConstant* gcalc_math_constant_divide (GCalcMathConstant* self,
                                               GCalcMathConstant* c);
GCalcMathConstant* gcalc_math_constant_neg (GCalcMathConstant* self);
GCalcMathConstant* gcalc_math_constant_pow (GCalcMathConstant* self,
                                            GCalcMathConstant* c);
gdouble gcalc_math_constant_complex_real (GCalcMathConstantComplex* self);
gdouble gcalc_math_constant_complex_imag (GCalcMathConstantComplex* self);
void gcalc_math_constant_complex_zero (GCalcMathConstantComplex* self);
gdouble gcalc_math_constant_number_value (GCalcMathConstantNumber* self);
GCalcExpressionHashMap* gcalc_math_equation_get_variables (GCalcMathEquation* self);
GCalcMathVariable* gcalc_math_equation_manager_find_variable (GCalcMathEquationManager* self,
                                                              const gchar* name);
GCalcExpressionContainer* gcalc_math_equation_manager_get_equations (GCalcMathEquationManager* self);
GCalcExpressionContainer* gcalc_math_equation_manager_get_functions (GCalcMathEquationManager* self);
const gchar* gcalc_math_error_result_get_message (GCalcMathErrorResult* self);
gchar* gcalc_math_expression_to_string (GCalcMathExpression* self);
GCalcMathResult* gcalc_math_expression_solve (GCalcMathExpression* self);
GCalcMathExpression* gcalc_math_expression_get_parent (GCalcMathExpression* self);
void gcalc_math_expression_set_parent (GCalcMathExpression* self,
                                       GCalcMathExpression* value);
GCalcExpressionContainer* gcalc_math_expression_get_expressions (GCalcMathExpression* self);
GCalcMathExpression* gcalc_math_function_evaluate (GCalcMathFunction* self,
                                                   GError** error);
gboolean gcalc_math_function_verify_params (GCalcMathFunction* self,
                                            GError** error);
GCalcExpressionContainer* gcalc_math_function_get_param_types (GCalcMathFunction* self);
const gchar* gcalc_math_function_get_name (GCalcMathFunction* self);
void gcalc_math_function_set_name (GCalcMathFunction* self,
                                   const gchar* value);
guint gcalc_math_function_get_n_params (GCalcMathFunction* self);
void gcalc_math_function_set_n_params (GCalcMathFunction* self,
                                       guint value);
gboolean gcalc_math_function_get_closed (GCalcMathFunction* self);
void gcalc_math_function_set_closed (GCalcMathFunction* self,
                                     gboolean value);
GQuark gcalc_function_error_quark (void);
GCalcMathExpression* gcalc_math_group_evaluate (GCalcMathGroup* self,
                                                GError** error);
GCalcMathGroupLevel gcalc_math_group_get_level (GCalcMathGroup* self);
void gcalc_math_group_set_level (GCalcMathGroup* self,
                                 GCalcMathGroupLevel value);
gboolean gcalc_math_group_get_closed (GCalcMathGroup* self);
void gcalc_math_group_set_closed (GCalcMathGroup* self,
                                  gboolean value);
GQuark gcalc_group_error_quark (void);
GType gcalc_math_minus_get_type (void) G_GNUC_CONST;
GType gcalc_math_multiply_get_type (void) G_GNUC_CONST;
GType gcalc_math_parameter_get_type (void) G_GNUC_CONST;
void gcalc_math_parameter_set_value (GCalcMathParameter* self,
                                     GValue* val,
                                     GError** error);
GValue* gcalc_math_parameter_get_value (GCalcMathParameter* self);
GType gcalc_math_plus_get_type (void) G_GNUC_CONST;
GType gcalc_math_polynomial_get_type (void) G_GNUC_CONST;
GCalcMathExpression* gcalc_math_polynomial_evaluate (GCalcMathPolynomial* self,
                                                     GError** error);
GType gcalc_math_pow_get_type (void) G_GNUC_CONST;
gchar* gcalc_math_result_to_string (GCalcMathResult* self);
GCalcMathExpression* gcalc_math_result_get_expression (GCalcMathResult* self);
GType gcalc_math_term_get_type (void) G_GNUC_CONST;
GCalcMathExpression* gcalc_math_term_add (GCalcMathTerm* self,
                                          GCalcMathTerm* t,
                                          GError** error);
GCalcMathExpression* gcalc_math_term_evaluate (GCalcMathTerm* self,
                                               GError** error);
GCalcMathExpression* gcalc_math_term_evaluate_constants (GCalcMathConstant* c1,
                                                         GCalcMathConstant* c2,
                                                         GCalcMathOperator* op,
                                                         GError** error);
GQuark gcalc_term_error_quark (void);
GCalcMathExpression* gcalc_math_variable_evaluate (GCalcMathVariable* self,
                                                   GError** error);
const gchar* gcalc_math_variable_get_name (GCalcMathVariable* self);
void gcalc_math_variable_set_name (GCalcMathVariable* self,
                                   const gchar* value);
GCalcMathConstant* gcalc_math_variable_get_value (GCalcMathVariable* self);
void gcalc_math_variable_set_value (GCalcMathVariable* self,
                                    GCalcMathConstant* value);
GCalcMathVariable* gcalc_math_variable_get_bind (GCalcMathVariable* self);
void gcalc_math_variable_set_bind (GCalcMathVariable* self,
                                   GCalcMathVariable* value);
gboolean gcalc_math_variable_get_binded (GCalcMathVariable* self);
GQuark gcalc_variable_error_quark (void);
GType gcalc_minus_get_type (void) G_GNUC_CONST;
GCalcMinus* gcalc_minus_new (void);
GCalcMinus* gcalc_minus_construct (GType object_type);
GType gcalc_multiply_get_type (void) G_GNUC_CONST;
GCalcMultiply* gcalc_multiply_new (void);
GCalcMultiply* gcalc_multiply_construct (GType object_type);
GType gcalc_variable_get_type (void) G_GNUC_CONST;
GType gcalc_parameter_get_type (void) G_GNUC_CONST;
GCalcParameter* gcalc_parameter_new (const gchar* name);
GCalcParameter* gcalc_parameter_construct (GType object_type,
                                           const gchar* name);
GType gcalc_parser_get_type (void) G_GNUC_CONST;
GType gcalc_parser_token_type_get_type (void) G_GNUC_CONST;
void gcalc_parser_parse (GCalcParser* self,
                         const gchar* str,
                         GCalcMathEquationManager* eqman,
                         GError** error);
GCalcParserTokenType gcalc_parser_read_token (GCalcParser* self);
gchar* gcalc_parser_token_to_string (GCalcParser* self);
GCalcParser* gcalc_parser_new (void);
GCalcParser* gcalc_parser_construct (GType object_type);
GQuark gcalc_parser_error_quark (void);
GType gcalc_plus_get_type (void) G_GNUC_CONST;
GCalcPlus* gcalc_plus_new (void);
GCalcPlus* gcalc_plus_construct (GType object_type);
GType gcalc_polynomial_get_type (void) G_GNUC_CONST;
GCalcPolynomial* gcalc_polynomial_new (void);
GCalcPolynomial* gcalc_polynomial_construct (GType object_type);
GType gcalc_pow_get_type (void) G_GNUC_CONST;
GCalcPow* gcalc_pow_new (void);
GCalcPow* gcalc_pow_construct (GType object_type);
GType gcalc_result_get_type (void) G_GNUC_CONST;
GCalcResult* gcalc_result_new (GCalcMathExpression* exp);
GCalcResult* gcalc_result_construct (GType object_type,
                                     GCalcMathExpression* exp);
GType gcalc_solver_get_type (void) G_GNUC_CONST;
void gcalc_solver_add_expression (GCalcSolver* self,
                                  const gchar* exp,
                                  GError** error);
GCalcMathResult* gcalc_solver_solve (GCalcSolver* self,
                                     const gchar* str,
                                     GError** error);
GCalcSolver* gcalc_solver_new (void);
GCalcSolver* gcalc_solver_construct (GType object_type);
GCalcMathEquationManager* gcalc_solver_get_equation_manager (GCalcSolver* self);
void gcalc_solver_set_equation_manager (GCalcSolver* self,
                                        GCalcMathEquationManager* value);
GQuark gcalc_solver_error_quark (void);
GType gcalc_term_get_type (void) G_GNUC_CONST;
GCalcTerm* gcalc_term_new (void);
GCalcTerm* gcalc_term_construct (GType object_type);

G_END_DECLS

#endif
