//===-- CFCMutableArray.cpp -------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "CFCMutableArray.h" #include "CFCString.h" //---------------------------------------------------------------------- // CFCString constructor //---------------------------------------------------------------------- CFCMutableArray::CFCMutableArray(CFMutableArrayRef s) : CFCReleaser (s) { } //---------------------------------------------------------------------- // CFCMutableArray copy constructor //---------------------------------------------------------------------- CFCMutableArray::CFCMutableArray(const CFCMutableArray& rhs) : CFCReleaser (rhs) // NOTE: this won't make a copy of the array, just add a new reference to it { } //---------------------------------------------------------------------- // CFCMutableArray copy constructor //---------------------------------------------------------------------- CFCMutableArray& CFCMutableArray::operator=(const CFCMutableArray& rhs) { if (this != &rhs) *this = rhs; // NOTE: this operator won't make a copy of the array, just add a new reference to it return *this; } //---------------------------------------------------------------------- // Destructor //---------------------------------------------------------------------- CFCMutableArray::~CFCMutableArray() { } CFIndex CFCMutableArray::GetCount() const { CFMutableArrayRef array = get(); if (array) return ::CFArrayGetCount (array); return 0; } CFIndex CFCMutableArray::GetCountOfValue(CFRange range, const void *value) const { CFMutableArrayRef array = get(); if (array) return ::CFArrayGetCountOfValue (array, range, value); return 0; } CFIndex CFCMutableArray::GetCountOfValue(const void *value) const { CFMutableArrayRef array = get(); if (array) return ::CFArrayGetCountOfValue (array, CFRangeMake(0, GetCount()), value); return 0; } const void * CFCMutableArray::GetValueAtIndex(CFIndex idx) const { CFMutableArrayRef array = get(); if (array) { const CFIndex num_array_items = ::CFArrayGetCount (array); if (0 <= idx && idx < num_array_items) { return ::CFArrayGetValueAtIndex (array, idx); } } return NULL; } bool CFCMutableArray::SetValueAtIndex(CFIndex idx, const void *value) { CFMutableArrayRef array = get(); if (array != NULL) { const CFIndex num_array_items = ::CFArrayGetCount (array); if (0 <= idx && idx < num_array_items) { ::CFArraySetValueAtIndex (array, idx, value); return true; } } return false; } bool CFCMutableArray::AppendValue(const void *value, bool can_create) { CFMutableArrayRef array = get(); if (array == NULL) { if (can_create == false) return false; array = ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); reset ( array ); } if (array != NULL) { ::CFArrayAppendValue(array, value); return true; } return false; } bool CFCMutableArray::AppendCStringAsCFString (const char *s, CFStringEncoding encoding, bool can_create) { CFMutableArrayRef array = get(); if (array == NULL) { if (can_create == false) return false; array = ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); reset ( array ); } if (array != NULL) { CFCString cf_str (s, encoding); ::CFArrayAppendValue (array, cf_str.get()); return true; } return false; } bool CFCMutableArray::AppendFileSystemRepresentationAsCFString (const char *s, bool can_create) { CFMutableArrayRef array = get(); if (array == NULL) { if (can_create == false) return false; array = ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); reset ( array ); } if (array != NULL) { CFCString cf_path; cf_path.SetFileSystemRepresentation(s); ::CFArrayAppendValue (array, cf_path.get()); return true; } return false; }