/** * Karaka * * @package Stdlib * @copyright Dennis Eichhorn * @license OMS License 1.0 * @version 1.0.0 * @link https://jingga.app */ #ifndef ROUTER_ROUTER_H #define ROUTER_ROUTER_H #include #include #include #include #include #include "../Stdlib/HashTable.h" #include "../Hash/MeowHash.h" namespace Router { typedef void (*RouterFunc)(int, char **); typedef struct { Stdlib::HashTable::ht *routes; } Router; Router create_router(int size) { Router router; router.routes = Stdlib::HashTable::create_table(size, true); return router; } void set(Router *router, const char* route, void *endpoint) { Stdlib::HashTable::set_entry(router->routes, route, endpoint); } RouterFunc match_route(Router *router, const char *uri) { RouterFunc ptr = NULL; Stdlib::HashTable::it itr = Stdlib::HashTable::table_iterator(router->routes); std::regex regex; std::cmatch match; while (Stdlib::HashTable::next(&itr)) { regex = std::regex(itr.key); bool status = std::regex_search(uri, match, regex); if (status) { ptr = (RouterFunc) itr.value; } } return ptr; } void free_router(Router *router) { Stdlib::HashTable::free_table(router->routes); router->routes = NULL; } } #endif