summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/source/Host/macosx/cfcpp/CFCMutableArray.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lldb/source/Host/macosx/cfcpp/CFCMutableArray.cpp')
-rw-r--r--gnu/llvm/lldb/source/Host/macosx/cfcpp/CFCMutableArray.cpp131
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;
+}