180814287SRaphael Isemann //===-- CFCMutableSet.cpp -------------------------------------------------===// 230fdc8d8SChris Lattner // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 630fdc8d8SChris Lattner // 730fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 830fdc8d8SChris Lattner 930fdc8d8SChris Lattner #include "CFCMutableSet.h" 1030fdc8d8SChris Lattner 1130fdc8d8SChris Lattner 1230fdc8d8SChris Lattner // CFCString constructor 13b9c1b51eSKate Stone CFCMutableSet::CFCMutableSet(CFMutableSetRef s) 14b9c1b51eSKate Stone : CFCReleaser<CFMutableSetRef>(s) {} 1530fdc8d8SChris Lattner 1630fdc8d8SChris Lattner // CFCMutableSet copy constructor 17b9c1b51eSKate Stone CFCMutableSet::CFCMutableSet(const CFCMutableSet &rhs) 18b9c1b51eSKate Stone : CFCReleaser<CFMutableSetRef>(rhs) {} 1930fdc8d8SChris Lattner 2030fdc8d8SChris Lattner // CFCMutableSet copy constructor 21b9c1b51eSKate Stone const CFCMutableSet &CFCMutableSet::operator=(const CFCMutableSet &rhs) { 2230fdc8d8SChris Lattner if (this != &rhs) 2330fdc8d8SChris Lattner *this = rhs; 2430fdc8d8SChris Lattner return *this; 2530fdc8d8SChris Lattner } 2630fdc8d8SChris Lattner 2730fdc8d8SChris Lattner // Destructor 28*fd2433e1SJonas Devlieghere CFCMutableSet::~CFCMutableSet() = default; 2930fdc8d8SChris Lattner 30b9c1b51eSKate Stone CFIndex CFCMutableSet::GetCount() const { 3130fdc8d8SChris Lattner CFMutableSetRef set = get(); 3230fdc8d8SChris Lattner if (set) 3330fdc8d8SChris Lattner return ::CFSetGetCount(set); 3430fdc8d8SChris Lattner return 0; 3530fdc8d8SChris Lattner } 3630fdc8d8SChris Lattner 37b9c1b51eSKate Stone CFIndex CFCMutableSet::GetCountOfValue(const void *value) const { 3830fdc8d8SChris Lattner CFMutableSetRef set = get(); 3930fdc8d8SChris Lattner if (set) 4030fdc8d8SChris Lattner return ::CFSetGetCountOfValue(set, value); 4130fdc8d8SChris Lattner return 0; 4230fdc8d8SChris Lattner } 4330fdc8d8SChris Lattner 44b9c1b51eSKate Stone const void *CFCMutableSet::GetValue(const void *value) const { 4530fdc8d8SChris Lattner CFMutableSetRef set = get(); 4630fdc8d8SChris Lattner if (set) 4730fdc8d8SChris Lattner return ::CFSetGetValue(set, value); 4830fdc8d8SChris Lattner return NULL; 4930fdc8d8SChris Lattner } 5030fdc8d8SChris Lattner 51b9c1b51eSKate Stone const void *CFCMutableSet::AddValue(const void *value, bool can_create) { 5230fdc8d8SChris Lattner CFMutableSetRef set = get(); 53b9c1b51eSKate Stone if (set == NULL) { 54a6682a41SJonas Devlieghere if (!can_create) 5519503a2aSGreg Clayton return NULL; 5630fdc8d8SChris Lattner set = ::CFSetCreateMutable(kCFAllocatorDefault, 0, &kCFTypeSetCallBacks); 5730fdc8d8SChris Lattner reset(set); 5830fdc8d8SChris Lattner } 59b9c1b51eSKate Stone if (set != NULL) { 6030fdc8d8SChris Lattner ::CFSetAddValue(set, value); 6130fdc8d8SChris Lattner return value; 6230fdc8d8SChris Lattner } 6330fdc8d8SChris Lattner return NULL; 6430fdc8d8SChris Lattner } 6530fdc8d8SChris Lattner 66b9c1b51eSKate Stone void CFCMutableSet::RemoveValue(const void *value) { 6730fdc8d8SChris Lattner CFMutableSetRef set = get(); 6830fdc8d8SChris Lattner if (set) 6930fdc8d8SChris Lattner ::CFSetRemoveValue(set, value); 7030fdc8d8SChris Lattner } 7130fdc8d8SChris Lattner 72b9c1b51eSKate Stone void CFCMutableSet::RemoveAllValues() { 7330fdc8d8SChris Lattner CFMutableSetRef set = get(); 7430fdc8d8SChris Lattner if (set) 7530fdc8d8SChris Lattner ::CFSetRemoveAllValues(set); 7630fdc8d8SChris Lattner } 77