Sophie

Sophie

distrib > * > 2010.0 > * > by-pkgid > bd5e9d9a5b950be222fd802c845ee12b > files > 22

libgds-devel-1.4.5-1mdv2009.1.i586.rpm

// ==================================================================
// @(#)radix-tree.h
//
// A library of function that handles radix-trees intended to store
// IPv4 prefixes.
//
// @author Bruno Quoitin (bqu@info.ucl.ac.be)
// @date 22/10/2002
// @lastdate 08/11/2005
// ==================================================================

#ifndef __RADIX_TREE_H__
#define __RADIX_TREE_H__

#include <libgds/types.h>

// ----- pointer to free function for radix-tree items --------------
typedef void (*FRadixTreeDestroy)(void ** ppItem);
// ----- pointer to list function for radix-tree items --------------
typedef int (*FRadixTreeForEach)(uint32_t uKey, uint8_t uKeyLen,
				 void * pItem, void * pContext);

// ----- structure of a radix-tree node -----------------------------
typedef struct RadixTreeItem {
  struct RadixTreeItem * pLeft;  // 0
  struct RadixTreeItem * pRight; // 1
  void * pItem;
} SRadixTreeItem;

// ----- structure of a radix-tree ----------------------------------
typedef struct {
  SRadixTreeItem * pRoot;
  uint8_t uKeyLen;
  FRadixTreeDestroy fDestroy;
} SRadixTree;

// ----- radix_tree_create ------------------------------------------
extern SRadixTree * radix_tree_create(uint8_t uKeyLen,
				      FRadixTreeDestroy fDestroy);
// ----- radix_tree_destroy -----------------------------------------
extern void radix_tree_destroy(SRadixTree ** ppTree);
// ----- radix_tree_add ---------------------------------------------
extern int radix_tree_add(SRadixTree * pTree, uint32_t uKey,
			  uint8_t uKeyLen, void * pItem);
// ----- radix_tree_remove ------------------------------------------
extern int radix_tree_remove(SRadixTree * pTree, uint32_t uKey,
			     uint8_t uKeyLen, int iSingle);
// ----- radix_tree_get_exact ---------------------------------------
extern void * radix_tree_get_exact(SRadixTree * pTree,
				   uint32_t uKey,
				   uint8_t uKeyLen);
// ----- radix_tree_get_best ----------------------------------------
extern void * radix_tree_get_best(SRadixTree * pTree,
				  uint32_t uKey,
				  uint8_t uKeyLen);
// ----- radix_tree_for_each ----------------------------------------
extern int radix_tree_for_each(SRadixTree * pTree,
			       FRadixTreeForEach fForEach,
			       void * pContext);

// ----- radix_tree_num_nodes ---------------------------------------
extern int radix_tree_num_nodes(SRadixTree * pTree);

#endif