1 #ifndef SList_h
2 #define SList_h
3 
4 /*
5  * SList.h
6  *
7  * SOFTWARE RIGHTS
8  *
9  * We reserve no LEGAL rights to SORCERER -- SORCERER is in the public
10  * domain.  An individual or company may do whatever they wish with
11  * source code distributed with SORCERER or the code generated by
12  * SORCERER, including the incorporation of SORCERER, or its output, into
13  * commerical software.
14  *
15  * We encourage users to develop software with SORCERER.  However, we do
16  * ask that credit is given to us for developing SORCERER.  By "credit",
17  * we mean that if you incorporate our source code into one of your
18  * programs (commercial product, research project, or otherwise) that you
19  * acknowledge this fact somewhere in the documentation, research report,
20  * etc...  If you like SORCERER and have developed a nice tool with the
21  * output, please mention that you developed it using SORCERER.  In
22  * addition, we ask that this header remain intact in our source code.
23  * As long as these guidelines are kept, we expect to continue enhancing
24  * this system and expect to make other tools available as they are
25  * completed.
26  *
27  * PCCTS 1.33
28  * Terence Parr
29  * Parr Research Corporation
30  * with Purdue University and AHPCRC, University of Minnesota
31  * 1992-2000
32  */
33 
34 #include "pcctscfg.h"
35 
36 #include "pccts_stdio.h"
37 #include "pccts_stdlib.h"
38 
39 PCCTS_NAMESPACE_STD
40 
41 #include "PCCTSAST.h"
42 
43 class PCCTS_AST;
44 
45 class SListNode {
46 protected:
47 	void *_elem;			/* pointer to any kind of element */
48 	SListNode *_next;
49 public:
SListNode()50 	SListNode()				{_elem=_next=NULL;}
~SListNode()51 	virtual ~SListNode()	{_elem=_next=NULL;}
elem()52 	void *elem()			{ return _elem; }
setElem(void * e)53 	void setElem(void *e)	{ _elem = e; }
setNext(SListNode * t)54 	void setNext(SListNode *t)	{ _next = t; }
next()55 	SListNode *next()		{ return _next; }
56 };
57 
58 class SList {
59 	SListNode *head, *tail;
60 public:
SList()61 	SList() {head=tail=NULL;}
~SList()62 	virtual ~SList() {head=tail=NULL;}
63 	virtual void *iterate(SListNode **);
64 	virtual void add(void *e);
65 	virtual void lfree();
66 	virtual PCCTS_AST *to_ast(SList list);
require(int e,char * err)67 	virtual void require(int e,char *err){ if ( !e ) panic(err); }
panic(char * err)68 	virtual void panic(char *err){ /* MR23 */ printMessage(stderr, "SList panic: %s\n", err); exit(PCCTS_EXIT_FAILURE); }
69 	virtual int printMessage(FILE* pFile, const char* pFormat, ...); // MR23
70 };
71 
72 #endif
73