22 */
23
24 #ifndef SHARE_GC_Z_ZSAFEDELETE_INLINE_HPP
25 #define SHARE_GC_Z_ZSAFEDELETE_INLINE_HPP
26
27 #include "gc/z/zArray.inline.hpp"
28 #include "gc/z/zSafeDelete.hpp"
29 #include "metaprogramming/isArray.hpp"
30 #include "utilities/debug.hpp"
31
32 template <typename T>
33 ZSafeDeleteImpl<T>::ZSafeDeleteImpl(ZLock* lock) :
34 _lock(lock),
35 _enabled(0),
36 _deferred() {}
37
38 template <typename T>
39 bool ZSafeDeleteImpl<T>::deferred_delete(ItemT* item) {
40 ZLocker<ZLock> locker(_lock);
41 if (_enabled > 0) {
42 _deferred.add(item);
43 return true;
44 }
45
46 return false;
47 }
48
49 template <typename T>
50 void ZSafeDeleteImpl<T>::immediate_delete(ItemT* item) {
51 if (IsArray<T>::value) {
52 delete [] item;
53 } else {
54 delete item;
55 }
56 }
57
58 template <typename T>
59 void ZSafeDeleteImpl<T>::enable_deferred_delete() {
60 ZLocker<ZLock> locker(_lock);
61 _enabled++;
62 }
|
22 */
23
24 #ifndef SHARE_GC_Z_ZSAFEDELETE_INLINE_HPP
25 #define SHARE_GC_Z_ZSAFEDELETE_INLINE_HPP
26
27 #include "gc/z/zArray.inline.hpp"
28 #include "gc/z/zSafeDelete.hpp"
29 #include "metaprogramming/isArray.hpp"
30 #include "utilities/debug.hpp"
31
32 template <typename T>
33 ZSafeDeleteImpl<T>::ZSafeDeleteImpl(ZLock* lock) :
34 _lock(lock),
35 _enabled(0),
36 _deferred() {}
37
38 template <typename T>
39 bool ZSafeDeleteImpl<T>::deferred_delete(ItemT* item) {
40 ZLocker<ZLock> locker(_lock);
41 if (_enabled > 0) {
42 _deferred.append(item);
43 return true;
44 }
45
46 return false;
47 }
48
49 template <typename T>
50 void ZSafeDeleteImpl<T>::immediate_delete(ItemT* item) {
51 if (IsArray<T>::value) {
52 delete [] item;
53 } else {
54 delete item;
55 }
56 }
57
58 template <typename T>
59 void ZSafeDeleteImpl<T>::enable_deferred_delete() {
60 ZLocker<ZLock> locker(_lock);
61 _enabled++;
62 }
|