diff options
Diffstat (limited to 'gnu/llvm/lldb/source/Host/macosx/cfcpp/CFCMutableArray.cpp')
-rw-r--r-- | gnu/llvm/lldb/source/Host/macosx/cfcpp/CFCMutableArray.cpp | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/source/Host/macosx/cfcpp/CFCMutableArray.cpp b/gnu/llvm/lldb/source/Host/macosx/cfcpp/CFCMutableArray.cpp new file mode 100644 index 00000000000..a2172c296f6 --- /dev/null +++ b/gnu/llvm/lldb/source/Host/macosx/cfcpp/CFCMutableArray.cpp @@ -0,0 +1,131 @@ +//===-- CFCMutableArray.cpp -------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#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) + 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) + 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) + 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; +} |