1*30fdc8d8SChris Lattner //===-- CFCMutableSet.cpp ---------------------------------------*- C++ -*-===// 2*30fdc8d8SChris Lattner // 3*30fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 4*30fdc8d8SChris Lattner // 5*30fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 6*30fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 7*30fdc8d8SChris Lattner // 8*30fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 9*30fdc8d8SChris Lattner 10*30fdc8d8SChris Lattner #include "CFCMutableSet.h" 11*30fdc8d8SChris Lattner 12*30fdc8d8SChris Lattner // C Includes 13*30fdc8d8SChris Lattner // C++ Includes 14*30fdc8d8SChris Lattner // Other libraries and framework includes 15*30fdc8d8SChris Lattner // Project includes 16*30fdc8d8SChris Lattner 17*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 18*30fdc8d8SChris Lattner // CFCString constructor 19*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 20*30fdc8d8SChris Lattner CFCMutableSet::CFCMutableSet(CFMutableSetRef s) : 21*30fdc8d8SChris Lattner CFCReleaser<CFMutableSetRef> (s) 22*30fdc8d8SChris Lattner { 23*30fdc8d8SChris Lattner } 24*30fdc8d8SChris Lattner 25*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 26*30fdc8d8SChris Lattner // CFCMutableSet copy constructor 27*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 28*30fdc8d8SChris Lattner CFCMutableSet::CFCMutableSet(const CFCMutableSet& rhs) : 29*30fdc8d8SChris Lattner CFCReleaser<CFMutableSetRef> (rhs) 30*30fdc8d8SChris Lattner { 31*30fdc8d8SChris Lattner } 32*30fdc8d8SChris Lattner 33*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 34*30fdc8d8SChris Lattner // CFCMutableSet copy constructor 35*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 36*30fdc8d8SChris Lattner const CFCMutableSet& 37*30fdc8d8SChris Lattner CFCMutableSet::operator=(const CFCMutableSet& rhs) 38*30fdc8d8SChris Lattner { 39*30fdc8d8SChris Lattner if (this != &rhs) 40*30fdc8d8SChris Lattner *this = rhs; 41*30fdc8d8SChris Lattner return *this; 42*30fdc8d8SChris Lattner } 43*30fdc8d8SChris Lattner 44*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 45*30fdc8d8SChris Lattner // Destructor 46*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 47*30fdc8d8SChris Lattner CFCMutableSet::~CFCMutableSet() 48*30fdc8d8SChris Lattner { 49*30fdc8d8SChris Lattner } 50*30fdc8d8SChris Lattner 51*30fdc8d8SChris Lattner 52*30fdc8d8SChris Lattner CFIndex 53*30fdc8d8SChris Lattner CFCMutableSet::GetCount() const 54*30fdc8d8SChris Lattner { 55*30fdc8d8SChris Lattner CFMutableSetRef set = get(); 56*30fdc8d8SChris Lattner if (set) 57*30fdc8d8SChris Lattner return ::CFSetGetCount (set); 58*30fdc8d8SChris Lattner return 0; 59*30fdc8d8SChris Lattner } 60*30fdc8d8SChris Lattner 61*30fdc8d8SChris Lattner CFIndex 62*30fdc8d8SChris Lattner CFCMutableSet::GetCountOfValue(const void *value) const 63*30fdc8d8SChris Lattner { 64*30fdc8d8SChris Lattner CFMutableSetRef set = get(); 65*30fdc8d8SChris Lattner if (set) 66*30fdc8d8SChris Lattner return ::CFSetGetCountOfValue (set, value); 67*30fdc8d8SChris Lattner return 0; 68*30fdc8d8SChris Lattner } 69*30fdc8d8SChris Lattner 70*30fdc8d8SChris Lattner const void * 71*30fdc8d8SChris Lattner CFCMutableSet::GetValue(const void *value) const 72*30fdc8d8SChris Lattner { 73*30fdc8d8SChris Lattner CFMutableSetRef set = get(); 74*30fdc8d8SChris Lattner if (set) 75*30fdc8d8SChris Lattner return ::CFSetGetValue(set, value); 76*30fdc8d8SChris Lattner return NULL; 77*30fdc8d8SChris Lattner } 78*30fdc8d8SChris Lattner 79*30fdc8d8SChris Lattner 80*30fdc8d8SChris Lattner const void * 81*30fdc8d8SChris Lattner CFCMutableSet::AddValue(const void *value, bool can_create) 82*30fdc8d8SChris Lattner { 83*30fdc8d8SChris Lattner CFMutableSetRef set = get(); 84*30fdc8d8SChris Lattner if (set == NULL) 85*30fdc8d8SChris Lattner { 86*30fdc8d8SChris Lattner if (can_create == false) 87*30fdc8d8SChris Lattner return false; 88*30fdc8d8SChris Lattner set = ::CFSetCreateMutable(kCFAllocatorDefault, 0, &kCFTypeSetCallBacks); 89*30fdc8d8SChris Lattner reset ( set ); 90*30fdc8d8SChris Lattner } 91*30fdc8d8SChris Lattner if (set != NULL) 92*30fdc8d8SChris Lattner { 93*30fdc8d8SChris Lattner ::CFSetAddValue(set, value); 94*30fdc8d8SChris Lattner return value; 95*30fdc8d8SChris Lattner } 96*30fdc8d8SChris Lattner return NULL; 97*30fdc8d8SChris Lattner } 98*30fdc8d8SChris Lattner 99*30fdc8d8SChris Lattner void 100*30fdc8d8SChris Lattner CFCMutableSet::RemoveValue(const void *value) 101*30fdc8d8SChris Lattner { 102*30fdc8d8SChris Lattner CFMutableSetRef set = get(); 103*30fdc8d8SChris Lattner if (set) 104*30fdc8d8SChris Lattner ::CFSetRemoveValue(set, value); 105*30fdc8d8SChris Lattner } 106*30fdc8d8SChris Lattner 107*30fdc8d8SChris Lattner void 108*30fdc8d8SChris Lattner CFCMutableSet::RemoveAllValues() 109*30fdc8d8SChris Lattner { 110*30fdc8d8SChris Lattner CFMutableSetRef set = get(); 111*30fdc8d8SChris Lattner if (set) 112*30fdc8d8SChris Lattner ::CFSetRemoveAllValues(set); 113*30fdc8d8SChris Lattner } 114*30fdc8d8SChris Lattner 115