/*
 * 
 * (c) Copyright 1990 OPEN SOFTWARE FOUNDATION, INC.
 * (c) Copyright 1990 HEWLETT-PACKARD COMPANY
 * (c) Copyright 1990 DIGITAL EQUIPMENT CORPORATION
 * To anyone who acknowledges that this file is provided "AS IS"
 * without any express or implied warranty:
 *                 permission to use, copy, modify, and distribute this
 * file for any purpose is hereby granted without fee, provided that
 * the above copyright notices and this notice appears in all source
 * code copies, and that none of the names of Open Software
 * Foundation, Inc., Hewlett-Packard Company, or Digital Equipment
 * Corporation be used in advertising or publicity pertaining to
 * distribution of the software without specific, written prior
 * permission.  Neither Open Software Foundation, Inc., Hewlett-
 * Packard Company, nor Digital Equipment Corporation makes any
 * representations about the suitability of this software for any
 * purpose.
 * 
 */
/*
**
**  NAME:
**
**      namtbpvt.h
**
**  FACILITY:
**
**      Interface Definition Language (IDL) Compiler
**
**  ABSTRACT:
**
**  This header file contains the private definitions necessary for the
**  nametable modules.
**
**  VERSION: DCE 1.0
**
*/
/********************************************************************/
/*                                                                  */
/*   NAMTBPVT.H                                                     */
/*                                                                  */
/*              Data types private to the nametable routines.       */
/*                                                                  */
/********************************************************************/



/*
 *  We have a different (non-opaque) view of a NAMETABLE_id_t.
 */
typedef struct NAMETABLE_n_t * NAMETABLE_n_t_p;

typedef struct NAMETABLE_binding_n_t {
        int                              bindingLevel;
        char                            *theBinding;
        struct NAMETABLE_binding_n_t    *nextBindingThisLevel;
        struct NAMETABLE_binding_n_t    *oldBinding;
        NAMETABLE_n_t_p                  boundBy;
}
NAMETABLE_binding_n_t;


typedef struct NAMETABLE_n_t {
        struct NAMETABLE_n_t    *left;  /* Subtree with names less          */
        struct NAMETABLE_n_t    *right; /* Subtree with names greater       */
        struct NAMETABLE_n_t    *parent;/* Parent in the tree               */
                                        /* NULL if this is the root         */
        char                    *id;    /* The identifier string            */
        NAMETABLE_binding_n_t   *bindings;      /* The list of bindings known       */
                                                /* by this name at this time.       */
        NAMETABLE_binding_n_t   *tagBinding;    /* The structure known by this tag. */
}
NAMETABLE_n_t;

typedef struct NAMETABLE_temp_name_t {
        struct NAMETABLE_temp_name_t * next;  /* Next temp name chain block */
        NAMETABLE_n_t_p node;                 /* The temp name tree node    */
}
NAMETABLE_temp_name_t;

