#ifndef PATRICIATREE_H_
#define PATRICIATREE_H_

#include <typedef.h>

#pragma pack(1)

struct patriciaTreeNode_t {
	struct patriciaTreeNode_t *left;
	struct patriciaTreeNode_t *right;
	char *str;
	uint32t bit;
	uint32t value;
};

#pragma pack()

static inline uint8t getBit(char *str, uint32t bit) {	
	return (str[bit >> 3] & (1 << (bit & 7)));
}

void patriciaTreeInit(void *mem);
struct patriciaTreeNode_t *patriciaTreeDeinit();
struct patriciaTreeNode_t *patriciaTreeGetEndMem();
void patriciaTreeInsert(char *str, uint32t val);
uint32t patriciaTreeGetValue(char *str);

#endif