Android Build Tools
This commit is contained in:
@ -0,0 +1,70 @@
|
||||
#ifndef YASM_INTTREE_H
|
||||
#define YASM_INTTREE_H
|
||||
|
||||
#ifndef YASM_LIB_DECL
|
||||
#define YASM_LIB_DECL
|
||||
#endif
|
||||
|
||||
/* The interval_tree.h and interval_tree.cc files contain code for
|
||||
* interval trees implemented using red-black-trees as described in
|
||||
* the book _Introduction_To_Algorithms_ by Cormen, Leisserson,
|
||||
* and Rivest.
|
||||
*/
|
||||
|
||||
typedef struct IntervalTreeNode {
|
||||
struct IntervalTreeNode *left, *right, *parent;
|
||||
void *data;
|
||||
long low;
|
||||
long high;
|
||||
long maxHigh;
|
||||
int red; /* if red=0 then the node is black */
|
||||
} IntervalTreeNode;
|
||||
|
||||
typedef struct it_recursion_node {
|
||||
/* This structure stores the information needed when we take the
|
||||
* right branch in searching for intervals but possibly come back
|
||||
* and check the left branch as well.
|
||||
*/
|
||||
IntervalTreeNode *start_node;
|
||||
unsigned int parentIndex;
|
||||
int tryRightBranch;
|
||||
} it_recursion_node;
|
||||
|
||||
typedef struct IntervalTree {
|
||||
/* A sentinel is used for root and for nil. These sentinels are
|
||||
* created when ITTreeCreate is called. root->left should always
|
||||
* point to the node which is the root of the tree. nil points to a
|
||||
* node which should always be black but has aribtrary children and
|
||||
* parent and no key or info. The point of using these sentinels is so
|
||||
* that the root and nil nodes do not require special cases in the code
|
||||
*/
|
||||
IntervalTreeNode *root;
|
||||
IntervalTreeNode *nil;
|
||||
|
||||
/*private:*/
|
||||
unsigned int recursionNodeStackSize;
|
||||
it_recursion_node * recursionNodeStack;
|
||||
unsigned int currentParent;
|
||||
unsigned int recursionNodeStackTop;
|
||||
} IntervalTree;
|
||||
|
||||
YASM_LIB_DECL
|
||||
IntervalTree *IT_create(void);
|
||||
YASM_LIB_DECL
|
||||
void IT_destroy(IntervalTree *);
|
||||
YASM_LIB_DECL
|
||||
void IT_print(const IntervalTree *);
|
||||
YASM_LIB_DECL
|
||||
void *IT_delete_node(IntervalTree *, IntervalTreeNode *, long *low,
|
||||
long *high);
|
||||
YASM_LIB_DECL
|
||||
IntervalTreeNode *IT_insert(IntervalTree *, long low, long high, void *data);
|
||||
YASM_LIB_DECL
|
||||
IntervalTreeNode *IT_get_predecessor(const IntervalTree *, IntervalTreeNode *);
|
||||
YASM_LIB_DECL
|
||||
IntervalTreeNode *IT_get_successor(const IntervalTree *, IntervalTreeNode *);
|
||||
YASM_LIB_DECL
|
||||
void IT_enumerate(IntervalTree *, long low, long high, void *cbd,
|
||||
void (*callback) (IntervalTreeNode *node, void *cbd));
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user