130fdc8d8SChris Lattner //===-- CFCMutableSet.cpp ---------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
1030fdc8d8SChris Lattner #include "CFCMutableSet.h"
1130fdc8d8SChris Lattner 
1230fdc8d8SChris Lattner // C Includes
1330fdc8d8SChris Lattner // C++ Includes
1430fdc8d8SChris Lattner // Other libraries and framework includes
1530fdc8d8SChris Lattner // Project includes
1630fdc8d8SChris Lattner 
1730fdc8d8SChris Lattner //----------------------------------------------------------------------
1830fdc8d8SChris Lattner // CFCString constructor
1930fdc8d8SChris Lattner //----------------------------------------------------------------------
20*b9c1b51eSKate Stone CFCMutableSet::CFCMutableSet(CFMutableSetRef s)
21*b9c1b51eSKate Stone     : CFCReleaser<CFMutableSetRef>(s) {}
2230fdc8d8SChris Lattner 
2330fdc8d8SChris Lattner //----------------------------------------------------------------------
2430fdc8d8SChris Lattner // CFCMutableSet copy constructor
2530fdc8d8SChris Lattner //----------------------------------------------------------------------
26*b9c1b51eSKate Stone CFCMutableSet::CFCMutableSet(const CFCMutableSet &rhs)
27*b9c1b51eSKate Stone     : CFCReleaser<CFMutableSetRef>(rhs) {}
2830fdc8d8SChris Lattner 
2930fdc8d8SChris Lattner //----------------------------------------------------------------------
3030fdc8d8SChris Lattner // CFCMutableSet copy constructor
3130fdc8d8SChris Lattner //----------------------------------------------------------------------
32*b9c1b51eSKate Stone const CFCMutableSet &CFCMutableSet::operator=(const CFCMutableSet &rhs) {
3330fdc8d8SChris Lattner   if (this != &rhs)
3430fdc8d8SChris Lattner     *this = rhs;
3530fdc8d8SChris Lattner   return *this;
3630fdc8d8SChris Lattner }
3730fdc8d8SChris Lattner 
3830fdc8d8SChris Lattner //----------------------------------------------------------------------
3930fdc8d8SChris Lattner // Destructor
4030fdc8d8SChris Lattner //----------------------------------------------------------------------
41*b9c1b51eSKate Stone CFCMutableSet::~CFCMutableSet() {}
4230fdc8d8SChris Lattner 
43*b9c1b51eSKate Stone CFIndex CFCMutableSet::GetCount() const {
4430fdc8d8SChris Lattner   CFMutableSetRef set = get();
4530fdc8d8SChris Lattner   if (set)
4630fdc8d8SChris Lattner     return ::CFSetGetCount(set);
4730fdc8d8SChris Lattner   return 0;
4830fdc8d8SChris Lattner }
4930fdc8d8SChris Lattner 
50*b9c1b51eSKate Stone CFIndex CFCMutableSet::GetCountOfValue(const void *value) const {
5130fdc8d8SChris Lattner   CFMutableSetRef set = get();
5230fdc8d8SChris Lattner   if (set)
5330fdc8d8SChris Lattner     return ::CFSetGetCountOfValue(set, value);
5430fdc8d8SChris Lattner   return 0;
5530fdc8d8SChris Lattner }
5630fdc8d8SChris Lattner 
57*b9c1b51eSKate Stone const void *CFCMutableSet::GetValue(const void *value) const {
5830fdc8d8SChris Lattner   CFMutableSetRef set = get();
5930fdc8d8SChris Lattner   if (set)
6030fdc8d8SChris Lattner     return ::CFSetGetValue(set, value);
6130fdc8d8SChris Lattner   return NULL;
6230fdc8d8SChris Lattner }
6330fdc8d8SChris Lattner 
64*b9c1b51eSKate Stone const void *CFCMutableSet::AddValue(const void *value, bool can_create) {
6530fdc8d8SChris Lattner   CFMutableSetRef set = get();
66*b9c1b51eSKate Stone   if (set == NULL) {
6730fdc8d8SChris Lattner     if (can_create == false)
6819503a2aSGreg Clayton       return NULL;
6930fdc8d8SChris Lattner     set = ::CFSetCreateMutable(kCFAllocatorDefault, 0, &kCFTypeSetCallBacks);
7030fdc8d8SChris Lattner     reset(set);
7130fdc8d8SChris Lattner   }
72*b9c1b51eSKate Stone   if (set != NULL) {
7330fdc8d8SChris Lattner     ::CFSetAddValue(set, value);
7430fdc8d8SChris Lattner     return value;
7530fdc8d8SChris Lattner   }
7630fdc8d8SChris Lattner   return NULL;
7730fdc8d8SChris Lattner }
7830fdc8d8SChris Lattner 
79*b9c1b51eSKate Stone void CFCMutableSet::RemoveValue(const void *value) {
8030fdc8d8SChris Lattner   CFMutableSetRef set = get();
8130fdc8d8SChris Lattner   if (set)
8230fdc8d8SChris Lattner     ::CFSetRemoveValue(set, value);
8330fdc8d8SChris Lattner }
8430fdc8d8SChris Lattner 
85*b9c1b51eSKate Stone void CFCMutableSet::RemoveAllValues() {
8630fdc8d8SChris Lattner   CFMutableSetRef set = get();
8730fdc8d8SChris Lattner   if (set)
8830fdc8d8SChris Lattner     ::CFSetRemoveAllValues(set);
8930fdc8d8SChris Lattner }
90