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

编译器/解释器

开发平台:

Others

  1. /* ATokPtr.C
  2.  *
  3.  * ANTLRToken MUST be defined before entry to this file.
  4.  *
  5.  * SOFTWARE RIGHTS
  6.  *
  7.  * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
  8.  * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
  9.  * company may do whatever they wish with source code distributed with
  10.  * PCCTS or the code generated by PCCTS, including the incorporation of
  11.  * PCCTS, or its output, into commerical software.
  12.  *
  13.  * We encourage users to develop software with PCCTS.  However, we do ask
  14.  * that credit is given to us for developing PCCTS.  By "credit",
  15.  * we mean that if you incorporate our source code into one of your
  16.  * programs (commercial product, research project, or otherwise) that you
  17.  * acknowledge this fact somewhere in the documentation, research report,
  18.  * etc...  If you like PCCTS and have developed a nice tool with the
  19.  * output, please mention that you developed it using PCCTS.  In
  20.  * addition, we ask that this header remain intact in our source code.
  21.  * As long as these guidelines are kept, we expect to continue enhancing
  22.  * this system and expect to make other tools available as they are
  23.  * completed.
  24.  *
  25.  * ANTLR 1.33
  26.  * Written by Russell Quong June 30, 1995
  27.  * Adapted by Terence Parr to ANTLR stuff
  28.  * Parr Research Corporation
  29.  * with Purdue University and AHPCRC, University of Minnesota
  30.  * 1989-1998
  31.  */
  32. #include "pcctscfg.h"
  33. PCCTS_NAMESPACE_STD
  34. #include "ATokPtr.h"
  35. void ANTLRTokenPtr::ref() const
  36. {
  37.     if (ptr_ != NULL) {
  38. ptr_->ref();
  39. }
  40. }
  41. void ANTLRTokenPtr::deref()
  42. {
  43.     if (ptr_ != NULL)
  44.     {
  45. ptr_->deref();
  46. if ( ptr_->nref()==0 )
  47. {
  48.     delete ptr_;
  49. ptr_ = NULL;
  50. }
  51.     }
  52. }
  53. ANTLRTokenPtr::~ANTLRTokenPtr()
  54. {
  55.     deref();
  56. }
  57. //
  58. //  8-Apr-97 MR1 Make operator -> a const member function
  59. //   as weall as some other member functions
  60. //
  61. void ANTLRTokenPtr::operator = (const ANTLRTokenPtr & lhs) // MR1
  62. {
  63.     lhs.ref(); // protect against "xp = xp"; ie same underlying object
  64.     deref();
  65.     ptr_ = lhs.ptr_;
  66. }
  67. void ANTLRTokenPtr::operator = (ANTLRAbstractToken *addr)
  68. {
  69.     if (addr != NULL) {
  70. addr->ref();
  71.     }
  72.     deref();
  73.     ptr_ = addr;
  74. }