Store function / operator types when they are registered.
This commit is contained in:
@@ -1,12 +1,28 @@
|
||||
#ifndef LIBABACUS_CUSTOM_H
|
||||
#define LIBABACUS_CUSTOM_H
|
||||
|
||||
#include "parsetype.h"
|
||||
|
||||
/**
|
||||
* A function pointer that is called
|
||||
* to execute a certain type of function.
|
||||
*/
|
||||
typedef void(*libab_function_ptr)();
|
||||
|
||||
/**
|
||||
* The common information
|
||||
* that both operators and functions shared.
|
||||
*/
|
||||
struct libab_behavior_s {
|
||||
/**
|
||||
* The function that handles the parameters.
|
||||
*/
|
||||
libab_function_ptr function;
|
||||
/**
|
||||
* The type of the function.
|
||||
*/
|
||||
libab_parsetype* type;
|
||||
};
|
||||
/**
|
||||
* A struct that holds informatiion
|
||||
* about an operator that has been
|
||||
@@ -22,9 +38,9 @@ struct libab_operator_s {
|
||||
*/
|
||||
int associativity;
|
||||
/**
|
||||
* The functionality of the operator.
|
||||
* The behavior of this operator.
|
||||
*/
|
||||
libab_function_ptr function;
|
||||
struct libab_behavior_s behavior;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -34,11 +50,12 @@ struct libab_operator_s {
|
||||
*/
|
||||
struct libab_function_s {
|
||||
/**
|
||||
* The functionality of the function.
|
||||
* The behavior of this function.
|
||||
*/
|
||||
libab_function_ptr function;
|
||||
struct libab_behavior_s behavior;
|
||||
};
|
||||
|
||||
typedef struct libab_behavior_s libab_behavior;
|
||||
typedef struct libab_operator_s libab_operator;
|
||||
typedef struct libab_function_s libab_function;
|
||||
|
||||
|
||||
@@ -46,37 +46,41 @@ libab_result libab_init(libab* ab);
|
||||
* @param op the operator string to register.
|
||||
* @param precedence the precedence of the operator.
|
||||
* @param associativity the associativity of the operator.
|
||||
* @param type the type of this operator.
|
||||
* @param func the function that describes the functionality of the operator.
|
||||
* @return the result of the initialization.
|
||||
*/
|
||||
libab_result libab_register_operator_infix(libab* ab, const char* op, int precedence, int associativity, libab_function_ptr func);
|
||||
libab_result libab_register_operator_infix(libab* ab, const char* op, int precedence, int associativity, const char* type, libab_function_ptr func);
|
||||
/**
|
||||
* Registers an operation with libabacus that appears
|
||||
* before its operand.
|
||||
* @param ab the libabacus instance to register the operator with.
|
||||
* @param op the operator string to register.
|
||||
* @param type the type of this operator.
|
||||
* @param func the function that describes the functionality of the operator.
|
||||
* @return the result of the registration.
|
||||
*/
|
||||
libab_result libab_register_operator_prefix(libab* ab, const char* op, libab_function_ptr func);
|
||||
libab_result libab_register_operator_prefix(libab* ab, const char* op, const char* type, libab_function_ptr func);
|
||||
/**
|
||||
* Registers an operation with libabacus that appears
|
||||
* after its operand.
|
||||
* @param ab the libabacus instance to register the operator with.
|
||||
* @param op the operator string to register.
|
||||
* @param type the type of this operator.
|
||||
* @param func the function that describes the functionality of the operator.
|
||||
* @return the result of the registration.
|
||||
*/
|
||||
libab_result libab_register_operator_postfix(libab* ab, const char* op, libab_function_ptr func);
|
||||
libab_result libab_register_operator_postfix(libab* ab, const char* op, const char* type, libab_function_ptr func);
|
||||
|
||||
/**
|
||||
* Registers a function with libabacus.
|
||||
* @param ab the libabacus instance used to keep state.
|
||||
* @param name the name of the function.
|
||||
* @param type the type of this operator.
|
||||
* @param func the function that describes the functionality of the function.
|
||||
* @return the result of the initialization.
|
||||
*/
|
||||
libab_result libab_register_function(libab* ab, const char* name, libab_function_ptr func);
|
||||
libab_result libab_register_function(libab* ab, const char* name, const char* type, libab_function_ptr func);
|
||||
/**
|
||||
* Releases all the resources allocated by libabacus.
|
||||
* @param ab the libabacus instance to release.
|
||||
|
||||
Reference in New Issue
Block a user