diff options
Diffstat (limited to 'source/Host/macosx/cfcpp/CFCMutableArray.cpp')
| -rw-r--r-- | source/Host/macosx/cfcpp/CFCMutableArray.cpp | 166 | 
1 files changed, 166 insertions, 0 deletions
| diff --git a/source/Host/macosx/cfcpp/CFCMutableArray.cpp b/source/Host/macosx/cfcpp/CFCMutableArray.cpp new file mode 100644 index 0000000000000..c3c0a11193a7c --- /dev/null +++ b/source/Host/macosx/cfcpp/CFCMutableArray.cpp @@ -0,0 +1,166 @@ +//===-- 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<CFMutableArrayRef> (s) +{ +} + +//---------------------------------------------------------------------- +// CFCMutableArray copy constructor +//---------------------------------------------------------------------- +CFCMutableArray::CFCMutableArray(const CFCMutableArray& rhs) : +    CFCReleaser<CFMutableArrayRef> (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; +} | 
