File indexing completed on 2025-01-30 10:27:24
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 #if defined(XERCES_TMPLSINC)
0027 #include <xercesc/util/Janitor.hpp>
0028 #endif
0029
0030 XERCES_CPP_NAMESPACE_BEGIN
0031
0032
0033
0034
0035 template <class T> Janitor<T>::Janitor(T* const toDelete) :
0036 fData(toDelete)
0037 {
0038 }
0039
0040
0041 template <class T> Janitor<T>::~Janitor()
0042 {
0043 reset();
0044 }
0045
0046
0047
0048
0049
0050 template <class T> void
0051 Janitor<T>::orphan()
0052 {
0053 release();
0054 }
0055
0056
0057 template <class T> T&
0058 Janitor<T>::operator*() const
0059 {
0060 return *fData;
0061 }
0062
0063
0064 template <class T> T*
0065 Janitor<T>::operator->() const
0066 {
0067 return fData;
0068 }
0069
0070
0071 template <class T> T*
0072 Janitor<T>::get() const
0073 {
0074 return fData;
0075 }
0076
0077
0078 template <class T> T*
0079 Janitor<T>::release()
0080 {
0081 T* p = fData;
0082 fData = 0;
0083 return p;
0084 }
0085
0086
0087 template <class T> void Janitor<T>::reset(T* p)
0088 {
0089 if (fData)
0090 delete fData;
0091
0092 fData = p;
0093 }
0094
0095 template <class T> bool Janitor<T>::isDataNull()
0096 {
0097 return (fData == 0);
0098 }
0099
0100
0101
0102
0103
0104 template <class T> ArrayJanitor<T>::ArrayJanitor(T* const toDelete) :
0105 fData(toDelete)
0106 , fMemoryManager(0)
0107 {
0108 }
0109
0110 template <class T>
0111 ArrayJanitor<T>::ArrayJanitor(T* const toDelete,
0112 MemoryManager* const manager) :
0113 fData(toDelete)
0114 , fMemoryManager(manager)
0115 {
0116 }
0117
0118
0119 template <class T> ArrayJanitor<T>::~ArrayJanitor()
0120 {
0121 reset();
0122 }
0123
0124
0125
0126
0127
0128 template <class T> void
0129 ArrayJanitor<T>::orphan()
0130 {
0131 release();
0132 }
0133
0134
0135
0136 template <class T> T&
0137 ArrayJanitor<T>::operator[](XMLSize_t index) const
0138 {
0139
0140 return fData[index];
0141 }
0142
0143
0144 template <class T> T*
0145 ArrayJanitor<T>::get() const
0146 {
0147 return fData;
0148 }
0149
0150
0151 template <class T> T*
0152 ArrayJanitor<T>::release()
0153 {
0154 T* p = fData;
0155 fData = 0;
0156 return p;
0157 }
0158
0159
0160 template <class T> void
0161 ArrayJanitor<T>::reset(T* p)
0162 {
0163 if (fData) {
0164
0165 if (fMemoryManager)
0166 fMemoryManager->deallocate((void*)fData);
0167 else
0168 delete [] fData;
0169 }
0170
0171 fData = p;
0172 fMemoryManager = 0;
0173 }
0174
0175 template <class T> void
0176 ArrayJanitor<T>::reset(T* p, MemoryManager* const manager)
0177 {
0178 if (fData) {
0179
0180 if (fMemoryManager)
0181 fMemoryManager->deallocate((void*)fData);
0182 else
0183 delete [] fData;
0184 }
0185
0186 fData = p;
0187 fMemoryManager = manager;
0188 }
0189
0190
0191
0192
0193
0194 template <class T>
0195 JanitorMemFunCall<T>::JanitorMemFunCall(
0196 T* object,
0197 MFPT toCall) :
0198 fObject(object),
0199 fToCall(toCall)
0200 {
0201 }
0202
0203 template <class T>
0204 JanitorMemFunCall<T>::~JanitorMemFunCall()
0205 {
0206 reset ();
0207 }
0208
0209 template <class T>
0210 T& JanitorMemFunCall<T>::operator*() const
0211 {
0212 return *fObject;
0213 }
0214
0215
0216 template <class T>
0217 T* JanitorMemFunCall<T>::operator->() const
0218 {
0219 return fObject;
0220 }
0221
0222
0223 template <class T>
0224 T* JanitorMemFunCall<T>::get() const
0225 {
0226 return fObject;
0227 }
0228
0229
0230 template <class T>
0231 T* JanitorMemFunCall<T>::release()
0232 {
0233 T* p = fObject;
0234 fObject = 0;
0235 return p;
0236 }
0237
0238 template <class T>
0239 void JanitorMemFunCall<T>::reset(T* p)
0240 {
0241 if (fObject != 0 && fToCall != 0)
0242 (fObject->*fToCall)();
0243
0244 fObject = p;
0245 }
0246
0247
0248 XERCES_CPP_NAMESPACE_END