Home | History | Annotate | Download | only in h
      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:
     50 	SListNode()				{_elem=_next=NULL;}
     51 	virtual ~SListNode()	{_elem=_next=NULL;}
     52 	void *elem()			{ return _elem; }
     53 	void setElem(void *e)	{ _elem = e; }
     54 	void setNext(SListNode *t)	{ _next = t; }
     55 	SListNode *next()		{ return _next; }
     56 };
     57 
     58 class SList {
     59 	SListNode *head, *tail;
     60 public:
     61 	SList() {head=tail=NULL;}
     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);
     67 	virtual void require(int e,char *err){ if ( !e ) panic(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