File: cpw_linkedelement.h/***************************************************************************/
/* */
/* cpw_linkedelement.h */
/* */
/* LinkedElement, used by LinkedList. */
/* */
/* Copyright 2001-2002 by */
/* Jim Mathies, */
/* */
/* This file is part of the Cpw project, and may only be used, */
/* modified, and distributed under the terms of the Cpw project */
/* license. By continuing to use, modify, or distribute this file */
/* you indicate that you have read the license and understand and */
/* accept it fully. */
/* */
/* File Platform: cross */
/* */
/***************************************************************************/
#ifndef __cpw_linkedelement_h__
#define __cpw_linkedelement_h__
#include "cpw_config.h"
#include "cpw_str.h"
CPW_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Struct> */
/* LinkedElementType */
/* */
/* <Description> */
/* */
enum _LinkedElementType
{
Element_Empty = 0,
Element_Float64 = 1,
Element_Int32 = 2,
Element_pStr = 3,
Element_Void = 4
};
typedef enum _LinkedElementType LinkedElementType;
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Struct> */
/* LinkedElement */
/* */
/* <Description> */
/* */
struct _LinkedElement
{
union
{
int_32 e_int_32;
float_64 e_float_32;
void * e_pvoid;
pStr e_pstr;
} e;
LinkedElementType etype;
uint_32 id;
bool iterate;
void * childtomyright;
};
typedef struct _LinkedElement LinkedElement;
/* */
/*************************************************************************/
/* default construction */
extern CPW_INLINE LinkedElement*
le_createElement( void );
/* init a pStr element */
extern CPW_INLINE LinkedElement*
le_initStr( pStr string, uint_32 id );
/* init a string element */
extern CPW_INLINE LinkedElement*
le_initString( char* string, uint_32 id );
/* init a 64 bit float element */
extern CPW_INLINE LinkedElement*
le_initFloat64( float_64 number, uint_32 id );
/* init a 32 bit int element */
extern CPW_INLINE LinkedElement*
le_initInt32( int_32 number, uint_32 id );
/* init a void* pointer element */
extern CPW_INLINE LinkedElement*
le_initVoid( void * userp, uint_32 id );
/* default destruction */
extern CPW_INLINE void
le_freeElement( LinkedElement** le );
/* getters */
extern CPW_INLINE LinkedElementType
le_getType( LinkedElement* le );
extern CPW_INLINE pStr
le_getString( LinkedElement* le );
extern CPW_INLINE void*
le_getVoid( LinkedElement* le );
extern CPW_INLINE float_64
le_getFloat64( LinkedElement* le );
extern CPW_INLINE int_32
le_getInt32( LinkedElement* le );
extern CPW_INLINE uint_32
le_getId( LinkedElement* le );
/* setters */
extern CPW_INLINE void
le_setId( LinkedElement* le, uint_32 id );
extern CPW_INLINE void
le_setVoid( LinkedElement* le, void* p );
/* purge the list of elements */
extern CPW_INLINE void
le_cleanUp( LinkedElement* le, uint_32 * pkillcount );
/* add an element */
extern CPW_INLINE void
le_linkUp( LinkedElement* le, LinkedElement* sibling );
/* remove an element */
extern CPW_INLINE LinkedElement*
le_unLink( LinkedElement* me, LinkedElement * myParent, uint_32 id );
/* find an element */
extern CPW_INLINE LinkedElement*
le_seek( LinkedElement* le, uint_32 id );
/* count elements */
extern CPW_INLINE void
le_countUp( LinkedElement* le, uint_32 * pcount );
/* iterate all elements - init */
extern CPW_INLINE void
le_initIterate( LinkedElement* le );
/* iterate all elements - next */
extern CPW_INLINE LinkedElement*
le_getNext( LinkedElement* le );
/* get the last element */
extern CPW_INLINE LinkedElement*
le_lastOne( LinkedElement* le );
CPW_END_HEADER
#endif