--- libaitio/src/Attic/vars.c 2012/07/31 16:04:52 1.11.4.4 +++ libaitio/src/Attic/vars.c 2012/08/28 08:53:32 1.12.4.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: vars.c,v 1.11.4.4 2012/07/31 16:04:52 misho Exp $ +* $Id: vars.c,v 1.12.4.1 2012/08/28 08:53:32 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -652,4 +652,70 @@ io_findKeyVars(array_t * __restrict vars, u_short key) io_arrayDestroy(&tmp); return v; +} + +/* + * io_hashVar() - Generate hash key for variable + * + * @v = variable + * return: hash key + */ +u_short +io_hashVar(ait_val_t * __restrict v) +{ + void *p; + u_short cksum; + int l; + + if (!v) + return 0; + + switch (AIT_TYPE(v)) { + case empty: + AIT_KEY(v) = 0; + return 0; + case string: + case buffer: + p = AIT_ADDR(v); + l = AIT_LEN(v) / 2; + break; + case data: + p = v->val_data; + l = AIT_LEN(v) / 2; + break; + default: + p = &AIT_RAW(v); + l = sizeof AIT_RAW(v) / 2; + break; + } + cksum = crcFletcher16((u_short*) p, l); + + if (AIT_BE(v)) + AIT_KEY(v) = htobe16(cksum); + else if (AIT_LE(v)) + AIT_KEY(v) = htole16(cksum); + else + AIT_KEY(v) = cksum; + + return AIT_KEY(v); +} + +/* + * io_hashKeyVars() - Generate hash keys for variables + * + * @vars = Variables + * return -1 error or 0 ok + */ +inline int +io_hashKeyVars(array_t * __restrict vars) +{ + register int i; + + if (!vars) + return -1; + + for (i = 0; i < io_arraySize(vars); i++) + io_hashVar(io_array(vars, i, ait_val_t*)); + + return 0; }