|
1 | | - |
2 | | -typedef const void * CFTypeRef; |
| 1 | +@class NSString; |
| 2 | +@class NSArray; |
| 3 | +@class NSMutableArray; |
| 4 | +#define CF_BRIDGED_TYPE(T) __attribute__((objc_bridge(T))) |
| 5 | +typedef CF_BRIDGED_TYPE(id) void * CFTypeRef; |
3 | 6 | typedef signed long CFIndex; |
4 | 7 | typedef const struct __CFAllocator * CFAllocatorRef; |
5 | | -typedef const struct __CFString * CFStringRef; |
6 | | -typedef const struct __CFArray * CFArrayRef; |
7 | | -typedef struct __CFArray * CFMutableArrayRef; |
| 8 | +typedef const struct CF_BRIDGED_TYPE(NSString) __CFString * CFStringRef; |
| 9 | +typedef const struct CF_BRIDGED_TYPE(NSArray) __CFArray * CFArrayRef; |
| 10 | +typedef struct CF_BRIDGED_TYPE(NSMutableArray) __CFArray * CFMutableArrayRef; |
8 | 11 | extern const CFAllocatorRef kCFAllocatorDefault; |
9 | 12 | CFMutableArrayRef CFArrayCreateMutable(CFAllocatorRef allocator, CFIndex capacity); |
10 | 13 | extern void CFArrayAppendValue(CFMutableArrayRef theArray, const void *value); |
@@ -48,29 +51,9 @@ template <typename T> struct RemovePointer<T*> { |
48 | 51 | typedef T Type; |
49 | 52 | }; |
50 | 53 |
|
51 | | -template <typename T> struct IsPointer { |
52 | | - static constexpr bool value = false; |
53 | | -}; |
54 | | - |
55 | | -template <typename T> struct IsPointer<T*> { |
56 | | - static constexpr bool value = true; |
57 | | -}; |
58 | | - |
59 | | -template <typename T, bool isPointer> struct PtrTypeToCFOrObjC { |
60 | | - using PtrType = T; |
61 | | -}; |
62 | | - |
63 | | -template <typename T> struct PtrTypeToCFOrObjC<T, true> { |
64 | | - using PtrType = T; |
65 | | -}; |
66 | | - |
67 | | -template <typename T> struct PtrTypeToCFOrObjC<T, false> { |
68 | | - using PtrType = T*; |
69 | | -}; |
70 | | - |
71 | 54 | template <typename T> struct RetainPtr { |
72 | | -// using ValueType = typename RemovePointer<T>::Type; |
73 | | - using PtrType = typename PtrTypeToCFOrObjC<T, IsPointer<T>::value>::PtrType; |
| 55 | + using ValueType = typename RemovePointer<T>::Type; |
| 56 | + using PtrType = ValueType*; |
74 | 57 | PtrType t; |
75 | 58 |
|
76 | 59 | RetainPtr() : t(nullptr) { } |
|
0 commit comments