
/*******************************   strlist.h   *********************************

    Purpose: Simple string list abstract data type module header

    Notes:   This module implements a straightforward string ordered list 
             abstract data type.  It is optimized for appending and deleting 
             from the end of the list.  Since they are ordered lists, string
             lists may be sorted, and their members are addressed by ordinal
             position (starting from 0).
**/

#ifndef STRLIST_H
#define STRLIST_H

/******************************************************************************/
/****************************   Public Constants   ****************************/

#define NULL_INDEX                     -1        /* invalid string index */

/******************************************************************************/
/******************************   Public Types   ******************************/

typedef struct _StrListStruct *StrList;          /* the base string list type */

/******************************************************************************/
/****************************   Public Routines   *****************************/

#ifdef __STDC__

extern void    StrListAppend( StrList list, string */ );
extern void    StrListAppendFile( StrList list, char *filename );
extern StrList StrListCreate( void );
extern void    StrListDestroy( StrList list );
extern int     StrListEqual( StrList list1, StrList list2 );
extern char *  StrListPeek( StrList list, int index );
extern int     StrListSize( StrList list );
extern void    StrListSort( StrList list );
extern void    StrListUnique( StrList list );

#else

extern void    StrListAppend( /* list, string */ );
extern void    StrListAppendFile( /* list, filename */ );
extern StrList StrListCreate( /* void */ );
extern void    StrListDestroy( /* list */ );
extern int     StrListEqual( /* list1, list2 */ );
extern char *  StrListPeek( /* list, index */ );
extern int     StrListSize( /* list */ );
extern void    StrListSort( /* list */ );
extern void    StrListUnique( /* list */ );

#endif
#endif
