//===-- 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; }