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); |
|
220 private: |
219 private: |
221 static void RPtrArrayDelete(TAny *aPtr); |
220 static void RPtrArrayDelete(TAny *aPtr); |
222 static void LocalRPtrArrayDelete(TAny *aPtr); |
|
223 }; |
221 }; |
224 |
222 |
225 template <class T> |
223 template <class T> |
226 inline void CleanupRPtrArrayDelete<T>::PushL(T* aPtr) |
224 inline void CleanupRPtrArrayDelete<T>::PushL(T* aPtr) |
227 { |
225 { |
228 CleanupStack::PushL(TCleanupItem(&RPtrArrayDelete,aPtr)); |
226 CleanupStack::PushL(TCleanupItem(&RPtrArrayDelete,aPtr)); |
229 } |
227 } |
230 |
|
231 template <class T> |
|
232 inline void CleanupRPtrArrayDelete<T>::PushL(T& aRef) |
|
233 { |
|
234 CleanupStack::PushL(TCleanupItem(&LocalRPtrArrayDelete,&aRef)); |
|
235 } |
|
236 |
228 |
237 template <class T> |
229 template <class T> |
238 void CleanupRPtrArrayDelete<T>::RPtrArrayDelete(TAny *aPtr) |
230 void CleanupRPtrArrayDelete<T>::RPtrArrayDelete(TAny *aPtr) |
239 { |
231 { |
240 T* ptr = STATIC_CAST(T*,aPtr); |
232 T* ptr = STATIC_CAST(T*,aPtr); |
241 ptr->ResetAndDestroy(); |
233 ptr->ResetAndDestroy(); |
242 delete ptr; |
234 delete ptr; |
243 } |
235 } |
244 |
236 |
245 template <class T> |
237 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> |
|
253 inline void CleanupRPtrArrayPushL(T* aPtr) |
238 inline void CleanupRPtrArrayPushL(T* aPtr) |
254 { |
239 { |
255 CleanupRPtrArrayDelete<T>::PushL(aPtr); |
240 CleanupRPtrArrayDelete<T>::PushL(aPtr); |
256 } |
241 } |
257 |
242 |
258 template <class T> |
243 // RImplInfoPtrArray cleanup pusher |
259 inline void CleanupRPtrArrayPushL(T& aRef) |
244 template <class T> |
260 { |
245 class CleanupRImplInfoPtrArrayDelete |
261 CleanupRPtrArrayDelete<T>::PushL(aRef); |
246 { |
262 } |
247 public: |
|
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 |
263 |
276 |
264 // Table names |
277 // Table names |
265 _LIT( KNSmlTableVersion, "Version" ); |
278 _LIT( KNSmlTableVersion, "Version" ); |
266 |
279 |
267 // Column names |
280 // Column names |