xref: /unit/src/nxt_var.h (revision 2248:67f848571b9f)
1 
2 /*
3  * Copyright (C) NGINX, Inc.
4  */
5 
6 #ifndef _NXT_VAR_H_INCLUDED_
7 #define _NXT_VAR_H_INCLUDED_
8 
9 
10 typedef struct nxt_var_s        nxt_var_t;
11 typedef struct nxt_var_query_s  nxt_var_query_t;
12 
13 
14 typedef nxt_int_t (*nxt_var_handler_t)(nxt_task_t *task,
15                                        nxt_str_t *str,
16                                        void *ctx, uint16_t field);
17 
18 typedef int64_t (*nxt_var_field_hash_t)(nxt_mp_t *mp, nxt_str_t *str);
19 
20 typedef struct {
21     nxt_str_t               name;
22     nxt_var_handler_t       handler;
23     nxt_var_field_hash_t    field_hash;
24     uint32_t                index;
25 } nxt_var_decl_t;
26 
27 
28 typedef struct {
29     nxt_str_t               name;
30     uint16_t                hash;
31     uint32_t                index;
32 } nxt_var_field_t;
33 
34 
35 typedef struct {
36     nxt_mp_t                *pool;
37     nxt_lvlhsh_t            hash;
38     nxt_str_t               *spare;
39 } nxt_var_cache_t;
40 
41 
42 nxt_int_t nxt_var_register(nxt_var_decl_t *decl, size_t n);
43 nxt_int_t nxt_var_index_init(void);
44 
45 nxt_var_field_t *nxt_var_field_get(nxt_array_t *fields, uint16_t index);
46 
47 nxt_var_t *nxt_var_compile(nxt_str_t *str, nxt_mp_t *mp, nxt_array_t *fields);
48 nxt_int_t nxt_var_test(nxt_str_t *str, nxt_array_t *fields, u_char *error);
49 
50 nxt_int_t nxt_var_interpreter(nxt_task_t *task, nxt_var_cache_t *cache,
51     nxt_var_t *var, nxt_str_t *str, void *ctx, nxt_bool_t logging);
52 nxt_str_t *nxt_var_get(nxt_task_t *task, nxt_var_cache_t *cache,
53     nxt_str_t *name, void *ctx);
54 
55 
56 #endif /* _NXT_VAR_H_INCLUDED_ */
57