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
33 #include "pcctscfg.h"
34
35 PCCTS_NAMESPACE_STD
36
37 #include "ATokPtr.h"
38
ref() const39 void ANTLRTokenPtr::ref() const
40 {
41 if (ptr_ != NULL) {
42 ptr_->ref();
43 }
44 }
45
deref()46 void ANTLRTokenPtr::deref()
47 {
48 if (ptr_ != NULL)
49 {
50 ptr_->deref();
51 if ( ptr_->nref()==0 )
52 {
53 delete ptr_;
54 ptr_ = NULL;
55 }
56 }
57 }
58
~ANTLRTokenPtr()59 ANTLRTokenPtr::~ANTLRTokenPtr()
60 {
61 deref();
62 }
63
64 //
65 // 8-Apr-97 MR1 Make operator -> a const member function
66 // as weall as some other member functions
67 //
operator =(const ANTLRTokenPtr & lhs)68 void ANTLRTokenPtr::operator = (const ANTLRTokenPtr & lhs) // MR1
69 {
70 lhs.ref(); // protect against "xp = xp"; ie same underlying object
71 deref();
72 ptr_ = lhs.ptr_;
73 }
74
operator =(ANTLRAbstractToken * addr)75 void ANTLRTokenPtr::operator = (ANTLRAbstractToken *addr)
76 {
77 if (addr != NULL) {
78 addr->ref();
79 }
80 deref();
81 ptr_ = addr;
82 }
83