/*********************** -*- Mode: C -*- ***********************
 * File            : private.h
 *---------------------------------------------------------------
 * Description
 * ===========
 * This defines the private interface used internally by this component
 *---------------------------------------------------------------
 * Author          : Graeme McKerrell
 * Created On      : Wed Jan 28 08:45:01 2004
 * Status          : TESTED
 *---------------------------------------------------------------
 * HISTORY
 * 7-Dec-2004		Graeme McKerrell	
 *    Renamed to the "lub_" namespace
 * 5-May-2004		Graeme McKerrell	
 *    updates following review
 * 9-Feb-2004		Graeme McKerrell	
 *    modified compare MACRO
 * 28-Jan-2004		Graeme McKerrell	
 *    Initial version
 *---------------------------------------------------------------
 * Copyright (C) 2004 3Com Corporation. All Rights Reserved.
 **************************************************************** */
#include "lub/bintree.h"

/*************************************************************
 * PRIVATE OPERATIONS
 ************************************************************* */
/*------------------------------------------------------------ */
/* This is the operation which performs a top-down splay. It is
 * the core workhorse for this tree implementation.
 *
 * tree - the instance to invoke this operation upon
 * t    - the root node to splay to.
 * key  - the value with which to splay
 */
extern lub_bintree_node_t *lub_bintree_splay(const lub_bintree_t * tree,
					     lub_bintree_node_t * t,
					     const void *key);
/*------------------------------------------------------------ */
/* This operation converts a "node" into a "clientnode"
 * subtracting the offset gives the base pointer to the node
 *
 * this - the tree to invoke this operation upon
 * node - the node to convert
 */
#define lub_bintree_getclientnode(this,node)\
(void *)(((char*)node) - this->node_offset)
/*------------------------------------------------------------ */
/* This operation converts a "clientnode" into a "node"
 * adding the offset gives the base pointer to the node
 *
 * this       - the tree to invoke this operation upon
 * clientnode - the clientnode to convert
 */
#define lub_bintree_getnode(this,clientnode)\
(lub_bintree_node_t *)(((char*)clientnode) + this->node_offset)	/*lint -e826 */
/*------------------------------------------------------------ */
/* This operation compares a key with a "node"
 * it returns
 * <0 if key <  node
 *  0 if key == node
 * >0 if key >  node
 *
 * this - the tree to invoke this operation upon
 * node - the "node" to compare
 * key  - the key to compare
 */
#define lub_bintree_compare(this,node,key)\
(this)->compareFn(lub_bintree_getclientnode(this,node),key)
/*------------------------------------------------------------ */