Inital commit.

FossilOrigin-Name: a900bac6da52d3267ac5e6610c80141e8d3f7bda8df5f310c72c7571c927bbd6
This commit is contained in:
7u83@mail.ru 2015-04-05 18:27:02 +00:00
parent a3f9db9d46
commit ab8128a20f
2 changed files with 67 additions and 0 deletions

37
src/capwap/strheap.c Normal file
View File

@ -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;
}

30
src/capwap/strheap.h Normal file
View File

@ -0,0 +1,30 @@
#ifndef __STRHEAP_H
#define __STRHEAP_H
#include <stdint.h>
#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