CGEM BOSS 6.6.5.g
BESIII Offline Software System
Loading...
Searching...
No Matches
ReferenceCount.h
Go to the documentation of this file.
1#ifndef DCHAIN_REFERENCECOUNT_H
2#define DCHAIN_REFERENCECOUNT_H
3// -*- C++ -*-
4//
5// Package: DChain
6// Module: ReferenceCount
7//
8// Description: Base class for classes that need reference counting
9//
10// Usage:
11// ReferenceCount() - default constructor
12// ~ReferenceCount() - destructor
13// addLink() - record that another object points to this object
14// dropLink() - record that an object no longer points to this object
15//
16// Author: Simon Patton
17// Created: Fri May 17 08:01:51 EDT 1996
18// $Id: ReferenceCount.h,v 1.1.1.1 2009/03/03 06:06:56 maqm Exp $
19//
20// Revision history
21//
22// $Log: ReferenceCount.h,v $
23// Revision 1.1.1.1 2009/03/03 06:06:56 maqm
24// first import of DecayChain
25//
26// Revision 1.1 2006/01/11 20:28:09 cdj
27// massive class renaming, addition of [] for selection and unit tests
28//
29// Revision 1.4 2004/05/12 20:12:52 ryd
30// Added missing #include
31//
32// Revision 1.3 2004/05/11 02:39:17 ryd
33// Change reference count to UInt32 and throw exception if count exceeds maximum
34//
35// Revision 1.2 2003/05/15 19:56:01 cdj
36// revamped memory handling so always use a ReferenceHolder to deal with the reference counting
37//
38// Revision 1.1.1.1 2000/12/18 22:16:49 cdj
39// imported DChain
40//
41// Revision 1.2 1998/08/21 00:46:09 sjp
42// removed unnecessary include
43//
44// Revision 1.1 1998/08/19 20:56:46 sjp
45// New heder for reference counting class
46//
47// Revision 1.1 1998/08/17 23:59:22 sjp
48// New file to make libraries standalone
49//
50
51// system include files
52#include <stdint.h>
53
54// user include files
55//#include "DecayChain/util/DAException.h"
56
57// forward declarations
58namespace dchain {
59
60 /*
61 class TooManyReferencesException : public DAException
62 {
63 public:
64 TooManyReferencesException():DAException("Too many references to object in a DChain list.\n check sizes of list that you multiply."){}
65 };
66 */
67
68
70{
71 public:
72 // Constructors and destructor
74 virtual ~ReferenceCount() {}
75
76 // const member functions
77 void addLink() const ;
78 void dropLink() const ;
79
80 private:
81 // Constructors and destructor
82 ReferenceCount( const ReferenceCount& ) ; // stop default
83
84 // assignment operator(s)
85 const ReferenceCount& operator=( const ReferenceCount& ) ; // stop default
86
87 // data members
88 mutable uint32_t m_linkCount ;
89
90};
91
92// inline function definitions
93
94//
95// constructors and destructor
96//
97
99 m_linkCount( 0 )
100{
101}
102
103//
104// member functions
105//
106
107inline void ReferenceCount::addLink() const
108{
109 //if (m_linkCount==0xFFFFFFFF) {
110 // throw TooManyReferencesException();
111 //}
112 ++m_linkCount ;
113}
114
115inline void ReferenceCount::dropLink() const
116{
117 --m_linkCount ;
118 if ( 0 == m_linkCount ) {
119// It is necessary to throw away the 'const' so that the object
120// can be deleted
121 delete const_cast<ReferenceCount*>(this) ;
122 }
123}
124}
125#endif // DCHAIN_REFERENCECOUNT_H