//-----------------------------------------------------------------------------
// Copyright © 2003 - Philip Howard - All rights reserved
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//-----------------------------------------------------------------------------
// package	libh/map
// homepage	http://libh.slashusr.org/
//-----------------------------------------------------------------------------
// author	Philip Howard
// email	libh at ipal dot org
// homepage	http://phil.ipal.org/
//-----------------------------------------------------------------------------
// This file is best viewed using a fixed spaced font such as Courier
// and in a display at least 120 columns wide.
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// file		map_lib.h
//
// purpose	Define resources for the data MAPping library package that
//		are needed only by the library source code itself.
//-----------------------------------------------------------------------------
#ifndef __MAP_LIB_H__
#define __MAP_LIB_H__

//-----------------------------------------------------------------------------
// headers
//-----------------------------------------------------------------------------
#include "libh_common.h"

#include <libh/map.h>

//-----------------------------------------------------------------------------
// struct	map_link
// struct	map_node
//
// purpose	Define structures needed to keep the AVL trees used to hold
//		the mapping.
//-----------------------------------------------------------------------------
struct map_link {
    avl_link		link	;
    // The key is found here in the type specific structs.
};
struct map_node {
    struct map_mixed	data	;
    struct map_link	link	;
};

#if 0
//-----------------------------------------------------------------------------
// struct	map_mixed
//
// purpose	This structure holds data for each node.
//-----------------------------------------------------------------------------
struct map_mixed {
    union map_data {
	union map_scalar {
	    signed char		sc	;
	    unsigned char	uc	;
	    signed short	ss	;
	    unsigned short	us	;
	    signed int		si	;
	    unsigned int	ui	;
	    signed long		sl	;
	    unsigned long	ul	;
	    signed long long	sll	;
	    unsigned long long	ull	;
	    double		d	;
	    long double		ld	;
	    void *		ptr	;
	    MAP			map	;
	}		scalar	;
	struct map_string {
	    void *		ptr	;
	    size_t		len	;
	    char		dup	;
	}		string	;
    }		mix	;
    int		type	;
};
typedef struct map_mixed	map_mixed	;
#endif

//-----------------------------------------------------------------------------
// end of header
//-----------------------------------------------------------------------------
#endif /* __MAP_LIB_H__ */

