brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 9a5567f Raw
131 lines · cpp
1//===-- CFCMutableArray.cpp -----------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "CFCMutableArray.h"10#include "CFCString.h"11 12// CFCString constructor13CFCMutableArray::CFCMutableArray(CFMutableArrayRef s)14    : CFCReleaser<CFMutableArrayRef>(s) {}15 16// CFCMutableArray copy constructor17CFCMutableArray::CFCMutableArray(const CFCMutableArray &rhs) =18    default; // NOTE: this won't make a copy of the19             // array, just add a new reference to20             // it21 22// CFCMutableArray copy constructor23CFCMutableArray &CFCMutableArray::operator=(const CFCMutableArray &rhs) {24  if (this != &rhs)25    *this = rhs; // NOTE: this operator won't make a copy of the array, just add26                 // a new reference to it27  return *this;28}29 30// Destructor31CFCMutableArray::~CFCMutableArray() = default;32 33CFIndex CFCMutableArray::GetCount() const {34  CFMutableArrayRef array = get();35  if (array)36    return ::CFArrayGetCount(array);37  return 0;38}39 40CFIndex CFCMutableArray::GetCountOfValue(CFRange range,41                                         const void *value) const {42  CFMutableArrayRef array = get();43  if (array)44    return ::CFArrayGetCountOfValue(array, range, value);45  return 0;46}47 48CFIndex CFCMutableArray::GetCountOfValue(const void *value) const {49  CFMutableArrayRef array = get();50  if (array)51    return ::CFArrayGetCountOfValue(array, CFRangeMake(0, GetCount()), value);52  return 0;53}54 55const void *CFCMutableArray::GetValueAtIndex(CFIndex idx) const {56  CFMutableArrayRef array = get();57  if (array) {58    const CFIndex num_array_items = ::CFArrayGetCount(array);59    if (0 <= idx && idx < num_array_items) {60      return ::CFArrayGetValueAtIndex(array, idx);61    }62  }63  return NULL;64}65 66bool CFCMutableArray::SetValueAtIndex(CFIndex idx, const void *value) {67  CFMutableArrayRef array = get();68  if (array != NULL) {69    const CFIndex num_array_items = ::CFArrayGetCount(array);70    if (0 <= idx && idx < num_array_items) {71      ::CFArraySetValueAtIndex(array, idx, value);72      return true;73    }74  }75  return false;76}77 78bool CFCMutableArray::AppendValue(const void *value, bool can_create) {79  CFMutableArrayRef array = get();80  if (array == NULL) {81    if (!can_create)82      return false;83    array =84        ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);85    reset(array);86  }87  if (array != NULL) {88    ::CFArrayAppendValue(array, value);89    return true;90  }91  return false;92}93 94bool CFCMutableArray::AppendCStringAsCFString(const char *s,95                                              CFStringEncoding encoding,96                                              bool can_create) {97  CFMutableArrayRef array = get();98  if (array == NULL) {99    if (!can_create)100      return false;101    array =102        ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);103    reset(array);104  }105  if (array != NULL) {106    CFCString cf_str(s, encoding);107    ::CFArrayAppendValue(array, cf_str.get());108    return true;109  }110  return false;111}112 113bool CFCMutableArray::AppendFileSystemRepresentationAsCFString(114    const char *s, bool can_create) {115  CFMutableArrayRef array = get();116  if (array == NULL) {117    if (!can_create)118      return false;119    array =120        ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);121    reset(array);122  }123  if (array != NULL) {124    CFCString cf_path;125    cf_path.SetFileSystemRepresentation(s);126    ::CFArrayAppendValue(array, cf_path.get());127    return true;128  }129  return false;130}131