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