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