From ab8128a20f7cb68e66b7aa13816317a6e45238b9 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 5 Apr 2015 18:27:02 +0000 Subject: [PATCH] Inital commit. FossilOrigin-Name: a900bac6da52d3267ac5e6610c80141e8d3f7bda8df5f310c72c7571c927bbd6 --- src/capwap/strheap.c | 37 +++++++++++++++++++++++++++++++++++++ src/capwap/strheap.h | 30 ++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/capwap/strheap.c create mode 100644 src/capwap/strheap.h diff --git a/src/capwap/strheap.c b/src/capwap/strheap.c new file mode 100644 index 00000000..dc9612f3 --- /dev/null +++ b/src/capwap/strheap.c @@ -0,0 +1,37 @@ + +#include "strheap.h" + + +static int cmp(const void *v1,const void*v2) +{ + return ((struct cw_str *)v1)->id - ((struct cw_str *)v2)->id; +} + +static void del(void* d) +{ + return; +} + +cw_strheap_t cw_strheap_create() +{ + return avltree_create(cmp,del); +} + +const char * cw_strheap_add(cw_strheap_t t, struct cw_str *s) +{ + avltree_del(t,s); + return avltree_add(t,s); +} + +int cw_strheap_register_strings(cw_strheap_t h, struct cw_str *s) +{ + int n=0; + while ( s->id!=0){ + cw_strheap_add(h,s); + s++; + n++; + } + cw_strheap_add(h,s); + return n+1; +} + diff --git a/src/capwap/strheap.h b/src/capwap/strheap.h new file mode 100644 index 00000000..cc0397b0 --- /dev/null +++ b/src/capwap/strheap.h @@ -0,0 +1,30 @@ +#ifndef __STRHEAP_H +#define __STRHEAP_H + +#include + +#include "avltree.h" + + +typedef struct avltree * cw_strheap_t; + +struct cw_str { + uint32_t id; + const char *str; +}; + +extern cw_strheap_t cw_strheap_create(); +extern int cw_strheap_register_strings(cw_strheap_t h, struct cw_str *s); + +static inline const char * cw_strheap_get(cw_strheap_t h, int id) { + struct cw_str s, *rc; + s.id=id; + rc = avltree_get(h,&s); + if (rc) + return rc->str; + return cw_strheap_get(h,0); +} + + + +#endif