Blame pccts/h/ATokPtr.h

Packit Service 3e823c
/* ATokPtr.h
Packit Service 3e823c
 *
Packit Service 3e823c
 * SOFTWARE RIGHTS
Packit Service 3e823c
 *
Packit Service 3e823c
 * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
Packit Service 3e823c
 * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
Packit Service 3e823c
 * company may do whatever they wish with source code distributed with
Packit Service 3e823c
 * PCCTS or the code generated by PCCTS, including the incorporation of
Packit Service 3e823c
 * PCCTS, or its output, into commerical software.
Packit Service 3e823c
 *
Packit Service 3e823c
 * We encourage users to develop software with PCCTS.  However, we do ask
Packit Service 3e823c
 * that credit is given to us for developing PCCTS.  By "credit",
Packit Service 3e823c
 * we mean that if you incorporate our source code into one of your
Packit Service 3e823c
 * programs (commercial product, research project, or otherwise) that you
Packit Service 3e823c
 * acknowledge this fact somewhere in the documentation, research report,
Packit Service 3e823c
 * etc...  If you like PCCTS and have developed a nice tool with the
Packit Service 3e823c
 * output, please mention that you developed it using PCCTS.  In
Packit Service 3e823c
 * addition, we ask that this header remain intact in our source code.
Packit Service 3e823c
 * As long as these guidelines are kept, we expect to continue enhancing
Packit Service 3e823c
 * this system and expect to make other tools available as they are
Packit Service 3e823c
 * completed.
Packit Service 3e823c
 *
Packit Service 3e823c
 * ANTLR 1.33
Packit Service 3e823c
 * Written by Russell Quong June 30, 1995
Packit Service 3e823c
 * Adapted by Terence Parr to ANTLR stuff
Packit Service 3e823c
 * Parr Research Corporation
Packit Service 3e823c
 * with Purdue University and AHPCRC, University of Minnesota
Packit Service 3e823c
 * 1989-2000
Packit Service 3e823c
 */
Packit Service 3e823c
Packit Service 3e823c
#ifndef ATokPtr_h
Packit Service 3e823c
#define ATokPtr_h
Packit Service 3e823c
Packit Service 3e823c
#include "pcctscfg.h"
Packit Service 3e823c
Packit Service 3e823c
#include "pccts_stdio.h"
Packit Service 3e823c
Packit Service 3e823c
PCCTS_NAMESPACE_STD
Packit Service 3e823c
Packit Service 3e823c
// pointer to a reference counted object
Packit Service 3e823c
// robust in that an unused ANTLRTokenPtr can point to NULL.
Packit Service 3e823c
Packit Service 3e823c
class ANTLRAbstractToken;
Packit Service 3e823c
Packit Service 3e823c
class DllExportPCCTS ANTLRTokenPtr {
Packit Service 3e823c
public:
Packit Service 3e823c
    ANTLRTokenPtr(ANTLRAbstractToken *addr=NULL){ptr_ = addr; ref();}
Packit Service 3e823c
    ANTLRTokenPtr(const ANTLRTokenPtr &lhs)	{ptr_ = lhs.ptr_; lhs.ref();}
Packit Service 3e823c
    ~ANTLRTokenPtr();
Packit Service 3e823c
Packit Service 3e823c
    // use ANTLRTokenPtr as a pointer to ANTLRToken
Packit Service 3e823c
//
Packit Service 3e823c
//  8-Apr-97	MR1	Make operator -> a const member function
Packit Service 3e823c
//			  as well as some other member functions
Packit Service 3e823c
//
Packit Service 3e823c
    ANTLRAbstractToken *operator-> () const { return ptr_; }		// MR1
Packit Service 3e823c
//
Packit Service 3e823c
//  7-Apr-97 133MR1
Packit Service 3e823c
//	     Fix suggested by Andreas Magnusson
Packit Service 3e823c
//			(Andreas.Magnusson@mailbox.swipnet.se)
Packit Service 3e823c
    void operator = (const ANTLRTokenPtr & lhs);		    	// MR1
Packit Service 3e823c
    void operator = (ANTLRAbstractToken *addr);
Packit Service 3e823c
    int operator != (const ANTLRTokenPtr &q) const	    		// MR1 // MR11 unsigned -> int
Packit Service 3e823c
	{ return this->ptr_ != q.ptr_; }
Packit Service 3e823c
    int operator == (const ANTLRTokenPtr &q) const  			// MR1 // MR11 unsigned -> int
Packit Service 3e823c
	{ return this->ptr_ == q.ptr_; }
Packit Service 3e823c
    int operator == (const ANTLRAbstractToken *addr) const      // MR11
Packit Service 3e823c
    { return this->ptr_ == addr; }
Packit Service 3e823c
    int operator != (const ANTLRAbstractToken *addr) const      // MR11
Packit Service 3e823c
    { return this->ptr_ != addr; }
Packit Service 3e823c
Packit Service 3e823c
    void ref() const;
Packit Service 3e823c
    void deref();
Packit Service 3e823c
Packit Service 3e823c
protected:
Packit Service 3e823c
    ANTLRAbstractToken *ptr_;
Packit Service 3e823c
};
Packit Service 3e823c
Packit Service 3e823c
//typedef ANTLRTokenPtr _ANTLRTokenPtr;
Packit Service 3e823c
Packit Service 3e823c
/*
Packit Service 3e823c
 * Since you cannot redefine operator->() to return one of the user's
Packit Service 3e823c
 * token object types, we must down cast.  This is a drag.  Here's
Packit Service 3e823c
 * a macro that helps.  template: "mytoken(a-smart-ptr)->myfield".
Packit Service 3e823c
 */
Packit Service 3e823c
#define mytoken(tk) ((ANTLRToken *)(tk.operator->()))
Packit Service 3e823c
Packit Service 3e823c
#endif