26 * POSSIBILITY OF SUCH DAMAGE. |
26 * POSSIBILITY OF SUCH DAMAGE. |
27 */ |
27 */ |
28 |
28 |
29 |
29 |
30 #include <stdlib.h> |
30 #include <stdlib.h> |
31 #include <ucx/map.h> |
31 #include <cx/map.h> |
|
32 #include <cx/hash_map.h> |
32 |
33 |
33 #include "../public/nsapi.h" |
34 #include "../public/nsapi.h" |
34 #include "../util/pblock.h" |
35 #include "../util/pblock.h" |
35 |
36 |
36 #include "func.h" |
37 #include "func.h" |
37 |
38 |
38 UcxMap *function_map; |
39 CxMap *function_map; |
39 |
40 |
40 void func_init() { |
41 void func_init() { |
41 function_map = ucx_map_new(1337); |
42 function_map = cxHashMapCreate(cxDefaultAllocator, 256); |
42 } |
43 } |
43 |
44 |
44 void add_function(FuncStruct *func) { |
45 void add_function(FuncStruct *func) { |
45 struct FuncStruct *f = malloc(sizeof(FuncStruct)); |
46 struct FuncStruct *f = malloc(sizeof(FuncStruct)); |
46 *f = *func; |
47 *f = *func; |
50 name[i] = '-'; |
51 name[i] = '-'; |
51 } |
52 } |
52 } |
53 } |
53 f->name = name; |
54 f->name = name; |
54 log_ereport(LOG_VERBOSE, "add_function %s", f->name); |
55 log_ereport(LOG_VERBOSE, "add_function %s", f->name); |
55 ucx_map_cstr_put(function_map, (char*)f->name, f); |
56 cxMapPut(function_map, cx_hash_key_str(f->name), f); |
56 } |
57 } |
57 |
58 |
58 void add_functions(FuncStruct *funcs) { |
59 void add_functions(FuncStruct *funcs) { |
59 int i = 0; |
60 int i = 0; |
60 while(funcs[i].func != NULL) { |
61 while(funcs[i].func != NULL) { |
61 add_function(&funcs[i]); |
62 add_function(&funcs[i]); |
62 i++; |
63 i++; |
63 } |
64 } |
64 } |
65 } |
65 |
66 |
66 FuncStruct* get_function(char *name) { |
67 FuncStruct* get_function(const char *name) { |
67 for(int i=0;name[i]!='\0';i++) { |
68 char *name_dup = strdup(name); |
68 if(name[i] == '_') { |
69 for(int i=0;name_dup[i]!='\0';i++) { |
69 name[i] = '-'; |
70 if(name_dup[i] == '_') { |
|
71 name_dup[i] = '-'; |
70 } |
72 } |
71 } |
73 } |
72 return ucx_map_cstr_get(function_map, name); |
74 void *ret = cxMapGet(function_map, cx_hash_key_str(name_dup)); |
|
75 free(name_dup); |
|
76 return ret; |
73 } |
77 } |
74 |
78 |
75 FuncStruct* func_resolve(pblock *pb, Session *sn, Request *rq) { |
79 FuncStruct* func_resolve(pblock *pb, Session *sn, Request *rq) { |
76 char *name = pblock_findkeyval(pb_key_fn, pb); |
80 char *name = pblock_findkeyval(pb_key_fn, pb); |
77 if(name == NULL) { |
81 if(name == NULL) { |