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//---------------------------------------------------------------------- 16CFCMutableArray::CFCMutableArray(CFMutableArrayRef s) : 17 CFCReleaser<CFMutableArrayRef> (s) 18{ 19} 20 21//---------------------------------------------------------------------- 22// CFCMutableArray copy constructor 23//---------------------------------------------------------------------- 24CFCMutableArray::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//---------------------------------------------------------------------- 32CFCMutableArray& 33CFCMutableArray::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//---------------------------------------------------------------------- 43CFCMutableArray::~CFCMutableArray() 44{ 45} 46 47 48CFIndex 49CFCMutableArray::GetCount() const 50{ 51 CFMutableArrayRef array = get(); 52 if (array) 53 return ::CFArrayGetCount (array); 54 return 0; 55} 56 57CFIndex 58CFCMutableArray::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 66CFIndex 67CFCMutableArray::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 75const void * 76CFCMutableArray::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 90bool 91CFCMutableArray::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 107bool 108CFCMutableArray::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 127bool 128CFCMutableArray::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 147bool 148CFCMutableArray::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