1 //===-- CFCMutableArray.cpp -------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "CFCMutableArray.h" 11 #include "CFCString.h" 12 13 //---------------------------------------------------------------------- 14 // CFCString constructor 15 //---------------------------------------------------------------------- 16 CFCMutableArray::CFCMutableArray(CFMutableArrayRef s) : 17 CFCReleaser<CFMutableArrayRef> (s) 18 { 19 } 20 21 //---------------------------------------------------------------------- 22 // CFCMutableArray copy constructor 23 //---------------------------------------------------------------------- 24 CFCMutableArray::CFCMutableArray(const CFCMutableArray& rhs) : 25 CFCReleaser<CFMutableArrayRef> (rhs) // NOTE: this won't make a copy of the array, just add a new reference to it 26 { 27 } 28 29 //---------------------------------------------------------------------- 30 // CFCMutableArray copy constructor 31 //---------------------------------------------------------------------- 32 CFCMutableArray& 33 CFCMutableArray::operator=(const CFCMutableArray& rhs) 34 { 35 if (this != &rhs) 36 *this = rhs; // NOTE: this operator won't make a copy of the array, just add a new reference to it 37 return *this; 38 } 39 40 //---------------------------------------------------------------------- 41 // Destructor 42 //---------------------------------------------------------------------- 43 CFCMutableArray::~CFCMutableArray() 44 { 45 } 46 47 48 CFIndex 49 CFCMutableArray::GetCount() const 50 { 51 CFMutableArrayRef array = get(); 52 if (array) 53 return ::CFArrayGetCount (array); 54 return 0; 55 } 56 57 CFIndex 58 CFCMutableArray::GetCountOfValue(CFRange range, const void *value) const 59 { 60 CFMutableArrayRef array = get(); 61 if (array) 62 return ::CFArrayGetCountOfValue (array, range, value); 63 return 0; 64 } 65 66 CFIndex 67 CFCMutableArray::GetCountOfValue(const void *value) const 68 { 69 CFMutableArrayRef array = get(); 70 if (array) 71 return ::CFArrayGetCountOfValue (array, CFRangeMake(0, GetCount()), value); 72 return 0; 73 } 74 75 const void * 76 CFCMutableArray::GetValueAtIndex(CFIndex idx) const 77 { 78 CFMutableArrayRef array = get(); 79 if (array) 80 { 81 const CFIndex num_array_items = ::CFArrayGetCount (array); 82 if (0 <= idx && idx < num_array_items) 83 { 84 return ::CFArrayGetValueAtIndex (array, idx); 85 } 86 } 87 return NULL; 88 } 89 90 bool 91 CFCMutableArray::SetValueAtIndex(CFIndex idx, const void *value) 92 { 93 CFMutableArrayRef array = get(); 94 if (array != NULL) 95 { 96 const CFIndex num_array_items = ::CFArrayGetCount (array); 97 if (0 <= idx && idx < num_array_items) 98 { 99 ::CFArraySetValueAtIndex (array, idx, value); 100 return true; 101 } 102 } 103 return false; 104 } 105 106 107 bool 108 CFCMutableArray::AppendValue(const void *value, bool can_create) 109 { 110 CFMutableArrayRef array = get(); 111 if (array == NULL) 112 { 113 if (can_create == false) 114 return false; 115 array = ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); 116 reset ( array ); 117 } 118 if (array != NULL) 119 { 120 ::CFArrayAppendValue(array, value); 121 return true; 122 } 123 return false; 124 } 125 126 127 bool 128 CFCMutableArray::AppendCStringAsCFString (const char *s, CFStringEncoding encoding, bool can_create) 129 { 130 CFMutableArrayRef array = get(); 131 if (array == NULL) 132 { 133 if (can_create == false) 134 return false; 135 array = ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); 136 reset ( array ); 137 } 138 if (array != NULL) 139 { 140 CFCString cf_str (s, encoding); 141 ::CFArrayAppendValue (array, cf_str.get()); 142 return true; 143 } 144 return false; 145 } 146 147 bool 148 CFCMutableArray::AppendFileSystemRepresentationAsCFString (const char *s, bool can_create) 149 { 150 CFMutableArrayRef array = get(); 151 if (array == NULL) 152 { 153 if (can_create == false) 154 return false; 155 array = ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); 156 reset ( array ); 157 } 158 if (array != NULL) 159 { 160 CFCString cf_path; 161 cf_path.SetFileSystemRepresentation(s); 162 ::CFArrayAppendValue (array, cf_path.get()); 163 return true; 164 } 165 return false; 166 } 167