summaryrefslogtreecommitdiff
path: root/src/elua.h
blob: 11abc955dc86359d7da634055109069ed4411535 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*************************************************************************
    > File Name: elua.h
    > Author: pxz
    > Created Time: Wed 01 Sep 2022 
 ************************************************************************/
#pragma once

#include <stddef.h>

enum elua_type
{
    NIL = 0,
    STRING = 1,
    INTEGER,
    BOOLEAN,
    TABLE,
};

struct elua_table;

struct elua_data
{
	enum elua_type type;
	size_t len;
    union{
        char *buff;
        long integer;
        bool true_or_false;
		struct elua_table *table;
    };
};

struct elua_vm;

/* function name:     elua_create_vm
 * input:             char *name          the name of virtual machine, default: "TSG"
 * return value:      elua_handle      successed,return a virtual machine; failed, return NULL*/
struct elua_vm *elua_create_vm(const char *vm_name);

/* input:           vm              a virtual machine
 *                  elua_function   the name of lua function 
 * return value :   0, successed; other failed.*/
int elua_remove_function(struct elua_vm *vm, const char *elua_function);

const char *elua_get_last_error_string(struct elua_vm *vm);

/* input:             vm             a virtual machine
 * return value:      successed, return 0; failed, return other */
int elua_destroy_vm(struct elua_vm *vm);

int elua_cbinding_get_input_params_num(struct elua_vm *vm);
int elua_cbinding_get_input_param(struct elua_vm *vm, int param_index, struct elua_data *param);
int elua_cbinding_append_output_params(struct elua_vm *vm, struct elua_data *params, int params_num);

struct elua_table *elua_create_table(struct elua_vm *vm);
int elua_add_table(struct elua_table *table, struct elua_data *key, struct elua_data *value);
int elua_update_table(struct elua_table *table, struct elua_data *key, struct elua_data *value);
int elua_delete_table(struct elua_table *table, struct elua_data *key);
struct elua_data *elua_search_table(struct elua_table *table, struct elua_data *key);
void elua_destroy_table(struct elua_table *table);

/* description:       get C userdata
 * input:             elua_handle L           a virtual machine
 * return value:      successed, return 0; failed, return other */
void *elua_get_execute_userdata(struct elua_vm *vm);

typedef int (*elua_cbinding_func_ptr)(struct elua_vm *vm);
/* description:       Regist a c function to lua
 * input:             vm                  a virtual machine
 * input:             func_space_name     The function space to which the function belongs
 * input:             elua_func_name      function name
 * input:             c_func_ptr          function pointer
 * return value:      int                 successed, return 0; failed, return other */
int elua_register_cbinding(struct elua_vm *vm, const char *func_space_name, const char *elua_func_name, elua_cbinding_func_ptr c_func_ptr);

struct elua_context;

/* input:             vm                  a virtual machine  
 * return value:      ctx_name            failed, return NULL; successed, return a context*/
struct elua_context *elua_create_context(struct elua_vm *vm, const char *ctx_name);

/* input:             context               context waiting to free        
 * return value:      int                   successed, return 0; failed, return other */
int elua_destroy_context(struct elua_context *ctx);

struct elua_script;

/* input:             vm                     a virtual machine
 *                    script                 script waiting to be cached, which must be script`s content
 *                    script_len             the length of script waiting to be cached
 *              
 * return value:     int                     successed, return a elua script; failed, return NULL */
struct elua_script *elua_cache_script(struct elua_vm *vm, const char *script, size_t script_len, size_t timeout_ms);
struct elua_script *elua_cache_script_file(struct elua_vm *vm, const char *script, size_t timeout_ms);

/* input:             vm                     a virtual machine
 *                    escript                elua script
 *                    input                  data waiting to be handled
 *                    input_len              input len
 *                    userdata               can get the userdata with elua_get_userdata(L)
 *                    context                can accessed with lua-name.context in lua script
 *                    timeout_ms             Maximum time to run the script.if timeout_ms > 0, jit.off; timeout_ms == 0, jit.on, not expired.
 * output:            outvalue               Requires input of an expected type, the type of the result that will be output after the call is complete
 * return value:      int                    successed, return 0; failed, return other */
int elua_execute_script(struct elua_script *escript, const char *input, size_t input_len, void *userdata, struct elua_context *ctx, struct elua_data *output);

/* input:             vm                     a virtual machine
 *                    escript                elua script
 * return value:      int                    successed, return 0; failed, return other */
int elua_cleanup_script(struct elua_script *escript);