12 #ifndef ROOT_CocoaUtils
13 #define ROOT_CocoaUtils
18 #include <Foundation/Foundation.h>
30 template<
class DerivedType>
31 class NSStrongReference {
38 explicit NSStrongReference(NSObject *nsObject)
39 : fNSObject([nsObject retain])
43 NSStrongReference(
const NSStrongReference &rhs)
44 : fNSObject([rhs.fNSObject retain])
54 NSStrongReference &operator = (
const NSStrongReference &rhs)
59 fNSObject = [rhs.fNSObject retain];
65 NSStrongReference(NSStrongReference && rhs)
67 fNSObject = rhs.fNSObject;
71 NSStrongReference & operator = (NSStrongReference && rhs)
77 fNSObject = rhs.fNSObject;
83 NSStrongReference &operator = (NSObject *nsObject)
85 if (nsObject != fNSObject) {
87 fNSObject = [nsObject retain];
93 DerivedType *Get()
const
95 return (DerivedType *)fNSObject;
98 void Reset(NSObject *
object)
100 if (fNSObject !=
object) {
101 NSObject *obj = [
object retain];
117 template<
class DerivedType>
125 explicit NSScopeGuard(NSObject *nsObject)
126 : fNSObject(nsObject)
136 DerivedType *Get()
const
138 return (DerivedType *)fNSObject;
141 void Reset(NSObject *
object)
143 if (
object != fNSObject) {
151 NSObject *ret = fNSObject;
158 NSScopeGuard(
const NSScopeGuard &rhs);
159 NSScopeGuard &operator = (
const NSScopeGuard &rhs);
168 class AutoreleasePool {
170 explicit AutoreleasePool(
bool delayCreation =
false);
178 NSAutoreleasePool *fPool;
180 AutoreleasePool(
const AutoreleasePool &rhs);
181 AutoreleasePool &operator = (
const AutoreleasePool &rhs);
192 template<
class RefType>
193 class CFStrongReference {
200 CFStrongReference(RefType ref,
bool initRetain)
203 if (initRetain && ref)
207 CFStrongReference(
const CFStrongReference &rhs)
214 CFStrongReference &operator = (
const CFStrongReference &rhs)
227 CFStrongReference(CFStrongReference && rhs)
233 CFStrongReference &operator = (CFStrongReference && rhs)
236 assert(
this != &rhs);
267 template<
class RefType>
275 explicit CFScopeGuard(RefType ref)
291 void Reset(RefType ref)
310 CFScopeGuard(
const CFScopeGuard &rhs);
311 CFScopeGuard &operator = (
const CFScopeGuard &rhs);
329 explicit ScopedArray(T * p = 0)
353 T &operator [] (std::ptrdiff_t index)
const
366 ScopedArray(
const ScopedArray &rhs);
367 ScopedArray &operator = (
const ScopedArray &rhs);