ATokPtr.h
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:3k
源码类别:

编译器/解释器

开发平台:

Others

  1. /* ATokPtr.h
  2.  *
  3.  * SOFTWARE RIGHTS
  4.  *
  5.  * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
  6.  * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
  7.  * company may do whatever they wish with source code distributed with
  8.  * PCCTS or the code generated by PCCTS, including the incorporation of
  9.  * PCCTS, or its output, into commerical software.
  10.  *
  11.  * We encourage users to develop software with PCCTS.  However, we do ask
  12.  * that credit is given to us for developing PCCTS.  By "credit",
  13.  * we mean that if you incorporate our source code into one of your
  14.  * programs (commercial product, research project, or otherwise) that you
  15.  * acknowledge this fact somewhere in the documentation, research report,
  16.  * etc...  If you like PCCTS and have developed a nice tool with the
  17.  * output, please mention that you developed it using PCCTS.  In
  18.  * addition, we ask that this header remain intact in our source code.
  19.  * As long as these guidelines are kept, we expect to continue enhancing
  20.  * this system and expect to make other tools available as they are
  21.  * completed.
  22.  *
  23.  * ANTLR 1.33
  24.  * Written by Russell Quong June 30, 1995
  25.  * Adapted by Terence Parr to ANTLR stuff
  26.  * Parr Research Corporation
  27.  * with Purdue University and AHPCRC, University of Minnesota
  28.  * 1989-1998
  29.  */
  30. #ifndef ATokPtr_h
  31. #define ATokPtr_h
  32. #include "pcctscfg.h"
  33. #include PCCTS_STDIO_H
  34. PCCTS_NAMESPACE_STD
  35. // pointer to a reference counted object
  36. // robust in that an unused ANTLRTokenPtr can point to NULL.
  37. class ANTLRAbstractToken;
  38. class DllExportPCCTS ANTLRTokenPtr {
  39. public:
  40.     ANTLRTokenPtr(ANTLRAbstractToken *addr=NULL){ptr_ = addr; ref();}
  41.     ANTLRTokenPtr(const ANTLRTokenPtr &lhs) {ptr_ = lhs.ptr_; lhs.ref();}
  42.     ~ANTLRTokenPtr();
  43.     // use ANTLRTokenPtr as a pointer to ANTLRToken
  44. //
  45. //  8-Apr-97 MR1 Make operator -> a const member function
  46. //   as well as some other member functions
  47. //
  48.     ANTLRAbstractToken *operator-> () const { return ptr_; } // MR1
  49. //
  50. //  7-Apr-97 133MR1
  51. //      Fix suggested by Andreas Magnusson
  52. // (Andreas.Magnusson@mailbox.swipnet.se)
  53.     void operator = (const ANTLRTokenPtr & lhs);      // MR1
  54.     void operator = (ANTLRAbstractToken *addr);
  55.     int operator != (const ANTLRTokenPtr &q) const      // MR1 // MR11 unsigned -> int
  56. { return this->ptr_ != q.ptr_; }
  57.     int operator == (const ANTLRTokenPtr &q) const   // MR1 // MR11 unsigned -> int
  58. { return this->ptr_ == q.ptr_; }
  59.     int operator == (const ANTLRAbstractToken *addr) const      // MR11
  60.     { return this->ptr_ == addr; }
  61.     int operator != (const ANTLRAbstractToken *addr) const      // MR11
  62.     { return this->ptr_ != addr; }
  63.     void ref() const;
  64.     void deref();
  65. protected:
  66.     ANTLRAbstractToken *ptr_;
  67. };
  68. //typedef ANTLRTokenPtr _ANTLRTokenPtr;
  69. /*
  70.  * Since you cannot redefine operator->() to return one of the user's
  71.  * token object types, we must down cast.  This is a drag.  Here's
  72.  * a macro that helps.  template: "mytoken(a-smart-ptr)->myfield".
  73.  */
  74. #define mytoken(tk) ((ANTLRToken *)(tk.operator->()))
  75. #endif