--- libaitrpc/src/lists.c 2014/01/28 14:05:43 1.16 +++ libaitrpc/src/lists.c 2025/03/31 12:21:07 1.19 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: lists.c,v 1.16 2014/01/28 14:05:43 misho Exp $ +* $Id: lists.c,v 1.19 2025/03/31 12:21:07 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004 - 2014 +Copyright 2004 - 2025 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -46,6 +46,29 @@ SUCH DAMAGE. #include "global.h" +#pragma GCC visibility push(hidden) + +static int +rpc_funcs_cmp(struct tagRPCFunc *a, struct tagRPCFunc *b) +{ + int ret; + + assert(a && b); + + ret = AIT_KEY(&a->func_name) - AIT_KEY(&b->func_name); + + if (ret < 0) + return -1; + else if (ret > 0) + return 1; + + return ret; +} + +RB_GENERATE(tagRPCFuncs, tagRPCFunc, func_node, rpc_funcs_cmp); + +#pragma GCC visibility pop + /* * rpc_srv_registerCall() - Register call to RPC server * @@ -73,7 +96,7 @@ rpc_srv_registerCall(rpc_srv_t * __restrict srv, u_sho } /* search for duplicate */ - if (AVL_FIND(tagRPCFuncs, &srv->srv_funcs, func)) { + if (RB_FIND(tagRPCFuncs, &srv->srv_funcs, func)) { e_free(func); return 0; } @@ -84,7 +107,7 @@ rpc_srv_registerCall(rpc_srv_t * __restrict srv, u_sho /* add to list of functions */ RPC_FUNCS_LOCK(&srv->srv_funcs); SLIST_INSERT_HEAD(&srv->srv_funcs, func, func_next); - AVL_INSERT(tagRPCFuncs, &srv->srv_funcs, func); + RB_INSERT(tagRPCFuncs, &srv->srv_funcs, func); RPC_FUNCS_UNLOCK(&srv->srv_funcs); return 1; } @@ -111,7 +134,7 @@ rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, u_s return 0; RPC_FUNCS_LOCK(&srv->srv_funcs); - AVL_REMOVE(tagRPCFuncs, &srv->srv_funcs, f); + RB_REMOVE(tagRPCFuncs, &srv->srv_funcs, f); SLIST_REMOVE(&srv->srv_funcs, f, tagRPCFunc, func_next); RPC_FUNCS_UNLOCK(&srv->srv_funcs); @@ -139,7 +162,7 @@ rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t t memset(&tmp, 0, sizeof tmp); AIT_KEY(&tmp.func_name) = tag; - return AVL_FIND(tagRPCFuncs, &srv->srv_funcs, &tmp); + return RB_FIND(tagRPCFuncs, &srv->srv_funcs, &tmp); } /* --------------------------------------------------------- */