--- libaitio/src/Attic/vars.c 2012/09/10 12:03:56 1.13.2.2 +++ libaitio/src/Attic/vars.c 2012/09/17 14:01:34 1.13.2.5 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: vars.c,v 1.13.2.2 2012/09/10 12:03:56 misho Exp $ +* $Id: vars.c,v 1.13.2.5 2012/09/17 14:01:34 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -815,4 +815,44 @@ io_setlikeVar(ait_val_t * __restrict v, ait_type_t t, va_end(lst); return 0; +} + +/* + * io_cmpVar() - Compare two variables + * + * @a = 1st variable + * @b = 2nd variable + * return: 0 is equal or !=0 is different + */ +inline int +io_cmpVar(ait_val_t * __restrict a, ait_val_t * __restrict b) +{ + intptr_t ret; + + if (!(ret = (b - a))) + return ret; + if ((ret = AIT_TYPE(b) - AIT_TYPE(a))) + return ret; + if ((ret = AIT_LEN(b) - AIT_LEN(a))) + return ret; + + switch (AIT_TYPE(a)) { + case buffer: + ret = memcmp(AIT_GET_BUF(a), AIT_GET_BUF(b), AIT_LEN(a)); + break; + case string: + ret = strncmp(AIT_GET_STR(a), AIT_GET_STR(b), AIT_LEN(a)); + break; + case data: + ret = memcmp(AIT_GET_DATA(a), AIT_GET_DATA(b), AIT_LEN(a)); + break; + case ptr: + ret = AIT_ADDR(b) - AIT_ADDR(a); + break; + default: + ret = AIT_RAW(b) - AIT_RAW(a); + break; + } + + return (int) ret; }