/*
* Motif
*
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these librararies and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*
*/
#ifndef _LIST_H
#define _LIST_H
#if defined(VMS) || defined (__VMS)
#include <X11/apienvset.h>
#endif
#include <Xm/Xm.h>
#include <Xm/Ext.h>
#ifdef __cplusplus
extern "C" {
#endif
/************************************************************
*
* Stack Data structure.
*
************************************************************/
typedef struct _XmStackRec {
int top, alloc; /* The top node of the stack, and the number
of allocated nodes. */
XtPointer * elems; /* The stack elements. */
} XmStackRec, *XmStack;
/************************************************************
*
* Global function defs.
*
************************************************************/
XmStack _XmStackInit(void);
void _XmStackFree(XmStack), _XmStackPush(XmStack, XtPointer);
XtPointer _XmStackPop(XmStack);
/************************************************************
*
* Queue Data structure.
*
************************************************************/
typedef struct __XmQElem {
struct __XmQElem *next, *prev; /* doubly linked list. */
XtPointer data; /* The data associated with this element. */
Boolean alloced;
} _XmQElem;
typedef struct _XmQueueRec {
_XmQElem *first, *last; /* the first and last elements. */
_XmQElem *free_elems; /* Unused elements. */
} XmQueueRec, *XmQueue;
/************************************************************
*
* Global function defs.
*
************************************************************/
XmQueue _XmQueueInit(void);
void _XmQueueFree(XmQueue), _XmQueuePush(XmQueue, XtPointer);
XtPointer _XmQueuePop(XmQueue);
int _XmQueueCount(XmQueue);
/*
* Internal functions used only by other parts of the utils library.
*/
void _Xm_AddQueue(XmQueue, _XmQElem *, _XmQElem *);
_XmQElem * _Xm_RemQueue(_XmQElem **);
_XmQElem * _Xm_GetNewElement(XmQueue);
/************************************************************
*
* New types.
*
************************************************************/
typedef _XmQElem XmListElem;
typedef XmQueueRec *XmList;
typedef Boolean (*XmListFunc)(XmListElem *, XtPointer);
/************************************************************
*
* Macros.
*
************************************************************/
#define XmListElemNext(elem) (elem)->next
#define XmListElemPrev(elem) (elem)->prev
#define XmListElemData(elem) (elem)->data
#define XmListFirst(list) (list)->first
#define XmListLast(list) (list)->last
/************************************************************
*
* Global function defs.
*
************************************************************/
void _XmListFree(XmList), _XmListRemove(XmList, XmListElem *);
XmListElem * _XmListAddAfter(XmList, XmListElem *, XtPointer);
XmListElem * _XmListAddBefore(XmList, XmListElem *, XtPointer);
XmList _XmListInit(void);
int _XmListCount(XmList);
XmListElem *_XmListExec(XmList, XmListElem *, XmListElem *, XmListFunc, XtPointer);
#ifdef __cplusplus
} /* Closes scope of 'extern "C"' declaration */
#endif
#if defined(VMS) || defined (__VMS)
#include <X11/apienvrst.h>
#endif
/* #ifdef XmRENAME_WIDGETS */
/* #define USE_OLD_NAMES */
/* #endif */
#ifdef USE_OLD_NAMES
#define ListAddAfter _XmListAddAfter
#define ListAddBefore _XmListAddBefore
#define ListCount _XmListCount
#define ListExec _XmListExec
#define ListFree _XmListFree
#define ListInit _XmListInit
#define ListRemove _XmListRemove
#define QueueCount _XmQueueCount
#define QueueFree _XmQueueFree
#define QueueInit _XmQueueInit
#define QueuePop _XmQueuePop
#define QueuePush _XmQueuePush
#define StackFree _XmStackFree
#define StackInit _XmStackInit
#define StackPop _XmStackPop
#define StackPush _XmStackPush
#define _AddQueue _Xm_AddQueue
#define _GetNewElement _Xm_GetNewElement
#define _RemQueue _Xm_RemQueue
#define Stack XmStack
#define StackRec XmStackRec
#define QElem _XmQElem
#define QueueRec XmQueueRec
#define Queue XmQueue
#define ListElem XmListElem
#define List XmList
#define ListFunc XmListFunc
#define ListElemNext XmListElemNext
#define ListElemPrev XmListElemPrev
#define ListElemData XmListElemData
#define ListFirst XmListFirst
#define ListLast XmListLast
#endif /* USE_OLD_NAMES */
#endif /* _LIST_H */