214 template <class T> |
214 template <class T> |
215 class CleanupRPtrArrayDelete |
215 class CleanupRPtrArrayDelete |
216 { |
216 { |
217 public: |
217 public: |
218 inline static void PushL(T* aPtr); |
218 inline static void PushL(T* aPtr); |
|
219 inline static void PushL(T& aRef); |
219 private: |
220 private: |
220 static void RPtrArrayDelete(TAny *aPtr); |
221 static void RPtrArrayDelete(TAny *aPtr); |
|
222 static void LocalRPtrArrayDelete(TAny *aPtr); |
221 }; |
223 }; |
222 |
224 |
223 template <class T> |
225 template <class T> |
224 inline void CleanupRPtrArrayDelete<T>::PushL(T* aPtr) |
226 inline void CleanupRPtrArrayDelete<T>::PushL(T* aPtr) |
225 { |
227 { |
226 CleanupStack::PushL(TCleanupItem(&RPtrArrayDelete,aPtr)); |
228 CleanupStack::PushL(TCleanupItem(&RPtrArrayDelete,aPtr)); |
227 } |
229 } |
|
230 |
|
231 template <class T> |
|
232 inline void CleanupRPtrArrayDelete<T>::PushL(T& aRef) |
|
233 { |
|
234 CleanupStack::PushL(TCleanupItem(&LocalRPtrArrayDelete,&aRef)); |
|
235 } |
228 |
236 |
229 template <class T> |
237 template <class T> |
230 void CleanupRPtrArrayDelete<T>::RPtrArrayDelete(TAny *aPtr) |
238 void CleanupRPtrArrayDelete<T>::RPtrArrayDelete(TAny *aPtr) |
231 { |
239 { |
232 T* ptr = STATIC_CAST(T*,aPtr); |
240 T* ptr = STATIC_CAST(T*,aPtr); |
233 ptr->ResetAndDestroy(); |
241 ptr->ResetAndDestroy(); |
234 delete ptr; |
242 delete ptr; |
235 } |
243 } |
236 |
244 |
237 template <class T> |
245 template <class T> |
|
246 void CleanupRPtrArrayDelete<T>::LocalRPtrArrayDelete(TAny *aPtr) |
|
247 { |
|
248 T* ptr = STATIC_CAST(T*,aPtr); |
|
249 ptr->ResetAndDestroy(); |
|
250 } |
|
251 |
|
252 template <class T> |
238 inline void CleanupRPtrArrayPushL(T* aPtr) |
253 inline void CleanupRPtrArrayPushL(T* aPtr) |
239 { |
254 { |
240 CleanupRPtrArrayDelete<T>::PushL(aPtr); |
255 CleanupRPtrArrayDelete<T>::PushL(aPtr); |
241 } |
256 } |
242 |
257 |
243 // RImplInfoPtrArray cleanup pusher |
258 template <class T> |
244 template <class T> |
259 inline void CleanupRPtrArrayPushL(T& aRef) |
245 class CleanupRImplInfoPtrArrayDelete |
260 { |
246 { |
261 CleanupRPtrArrayDelete<T>::PushL(aRef); |
247 public: |
262 } |
248 inline static void PushL(T* aPtr); |
|
249 private: |
|
250 static void RImplInfoPtrArrayDelete(TAny *aPtr); |
|
251 }; |
|
252 |
|
253 template <class T> |
|
254 inline void CleanupRImplInfoPtrArrayDelete<T>::PushL(T* aPtr) |
|
255 { |
|
256 CleanupStack::PushL(TCleanupItem(&RImplInfoPtrArrayDelete,aPtr)); |
|
257 } |
|
258 |
|
259 template <class T> |
|
260 void CleanupRImplInfoPtrArrayDelete<T>::RImplInfoPtrArrayDelete(TAny *aPtr) |
|
261 { |
|
262 if( aPtr ) |
|
263 { |
|
264 T* ptr = STATIC_CAST(T*,aPtr); |
|
265 ptr->ResetAndDestroy(); |
|
266 ptr->Close(); |
|
267 } |
|
268 } |
|
269 |
|
270 template <class T> |
|
271 inline void CleanupRImplInfoPtrArrayPushL(T* aPtr) |
|
272 { |
|
273 CleanupRImplInfoPtrArrayDelete<T>::PushL(aPtr); |
|
274 } |
|
275 |
|
276 |
263 |
277 // Table names |
264 // Table names |
278 _LIT( KNSmlTableVersion, "Version" ); |
265 _LIT( KNSmlTableVersion, "Version" ); |
279 |
266 |
280 // Column names |
267 // Column names |