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
CFCMutableSet(CFMutableSetRef s)13b9c1b51eSKate Stone CFCMutableSet::CFCMutableSet(CFMutableSetRef s)
14b9c1b51eSKate Stone     : CFCReleaser<CFMutableSetRef>(s) {}
1530fdc8d8SChris Lattner 
1630fdc8d8SChris Lattner // CFCMutableSet copy constructor
17*24f9a2f5SShafik Yaghmour CFCMutableSet::CFCMutableSet(const CFCMutableSet &rhs) = default;
1830fdc8d8SChris Lattner 
1930fdc8d8SChris Lattner // CFCMutableSet copy constructor
operator =(const CFCMutableSet & rhs)20b9c1b51eSKate Stone const CFCMutableSet &CFCMutableSet::operator=(const CFCMutableSet &rhs) {
2130fdc8d8SChris Lattner   if (this != &rhs)
2230fdc8d8SChris Lattner     *this = rhs;
2330fdc8d8SChris Lattner   return *this;
2430fdc8d8SChris Lattner }
2530fdc8d8SChris Lattner 
2630fdc8d8SChris Lattner // Destructor
27fd2433e1SJonas Devlieghere CFCMutableSet::~CFCMutableSet() = default;
2830fdc8d8SChris Lattner 
GetCount() const29b9c1b51eSKate Stone CFIndex CFCMutableSet::GetCount() const {
3030fdc8d8SChris Lattner   CFMutableSetRef set = get();
3130fdc8d8SChris Lattner   if (set)
3230fdc8d8SChris Lattner     return ::CFSetGetCount(set);
3330fdc8d8SChris Lattner   return 0;
3430fdc8d8SChris Lattner }
3530fdc8d8SChris Lattner 
GetCountOfValue(const void * value) const36b9c1b51eSKate Stone CFIndex CFCMutableSet::GetCountOfValue(const void *value) const {
3730fdc8d8SChris Lattner   CFMutableSetRef set = get();
3830fdc8d8SChris Lattner   if (set)
3930fdc8d8SChris Lattner     return ::CFSetGetCountOfValue(set, value);
4030fdc8d8SChris Lattner   return 0;
4130fdc8d8SChris Lattner }
4230fdc8d8SChris Lattner 
GetValue(const void * value) const43b9c1b51eSKate Stone const void *CFCMutableSet::GetValue(const void *value) const {
4430fdc8d8SChris Lattner   CFMutableSetRef set = get();
4530fdc8d8SChris Lattner   if (set)
4630fdc8d8SChris Lattner     return ::CFSetGetValue(set, value);
4730fdc8d8SChris Lattner   return NULL;
4830fdc8d8SChris Lattner }
4930fdc8d8SChris Lattner 
AddValue(const void * value,bool can_create)50b9c1b51eSKate Stone const void *CFCMutableSet::AddValue(const void *value, bool can_create) {
5130fdc8d8SChris Lattner   CFMutableSetRef set = get();
52b9c1b51eSKate Stone   if (set == NULL) {
53a6682a41SJonas Devlieghere     if (!can_create)
5419503a2aSGreg Clayton       return NULL;
5530fdc8d8SChris Lattner     set = ::CFSetCreateMutable(kCFAllocatorDefault, 0, &kCFTypeSetCallBacks);
5630fdc8d8SChris Lattner     reset(set);
5730fdc8d8SChris Lattner   }
58b9c1b51eSKate Stone   if (set != NULL) {
5930fdc8d8SChris Lattner     ::CFSetAddValue(set, value);
6030fdc8d8SChris Lattner     return value;
6130fdc8d8SChris Lattner   }
6230fdc8d8SChris Lattner   return NULL;
6330fdc8d8SChris Lattner }
6430fdc8d8SChris Lattner 
RemoveValue(const void * value)65b9c1b51eSKate Stone void CFCMutableSet::RemoveValue(const void *value) {
6630fdc8d8SChris Lattner   CFMutableSetRef set = get();
6730fdc8d8SChris Lattner   if (set)
6830fdc8d8SChris Lattner     ::CFSetRemoveValue(set, value);
6930fdc8d8SChris Lattner }
7030fdc8d8SChris Lattner 
RemoveAllValues()71b9c1b51eSKate Stone void CFCMutableSet::RemoveAllValues() {
7230fdc8d8SChris Lattner   CFMutableSetRef set = get();
7330fdc8d8SChris Lattner   if (set)
7430fdc8d8SChris Lattner     ::CFSetRemoveAllValues(set);
7530fdc8d8SChris Lattner }
76