1*30fdc8d8SChris Lattner //===-- CFCMutableDictionary.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 "CFCMutableDictionary.h" 11*30fdc8d8SChris Lattner #include "CFCString.h" 12*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 13*30fdc8d8SChris Lattner // CFCString constructor 14*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 15*30fdc8d8SChris Lattner CFCMutableDictionary::CFCMutableDictionary(CFMutableDictionaryRef s) : 16*30fdc8d8SChris Lattner CFCReleaser<CFMutableDictionaryRef> (s) 17*30fdc8d8SChris Lattner { 18*30fdc8d8SChris Lattner } 19*30fdc8d8SChris Lattner 20*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 21*30fdc8d8SChris Lattner // CFCMutableDictionary copy constructor 22*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 23*30fdc8d8SChris Lattner CFCMutableDictionary::CFCMutableDictionary(const CFCMutableDictionary& rhs) : 24*30fdc8d8SChris Lattner CFCReleaser<CFMutableDictionaryRef> (rhs) 25*30fdc8d8SChris Lattner { 26*30fdc8d8SChris Lattner } 27*30fdc8d8SChris Lattner 28*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 29*30fdc8d8SChris Lattner // CFCMutableDictionary copy constructor 30*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 31*30fdc8d8SChris Lattner const CFCMutableDictionary& 32*30fdc8d8SChris Lattner CFCMutableDictionary::operator=(const CFCMutableDictionary& rhs) 33*30fdc8d8SChris Lattner { 34*30fdc8d8SChris Lattner if (this != &rhs) 35*30fdc8d8SChris Lattner *this = rhs; 36*30fdc8d8SChris Lattner return *this; 37*30fdc8d8SChris Lattner } 38*30fdc8d8SChris Lattner 39*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 40*30fdc8d8SChris Lattner // Destructor 41*30fdc8d8SChris Lattner //---------------------------------------------------------------------- 42*30fdc8d8SChris Lattner CFCMutableDictionary::~CFCMutableDictionary() 43*30fdc8d8SChris Lattner { 44*30fdc8d8SChris Lattner } 45*30fdc8d8SChris Lattner 46*30fdc8d8SChris Lattner 47*30fdc8d8SChris Lattner CFIndex 48*30fdc8d8SChris Lattner CFCMutableDictionary::GetCount() const 49*30fdc8d8SChris Lattner { 50*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = get(); 51*30fdc8d8SChris Lattner if (dict) 52*30fdc8d8SChris Lattner return ::CFDictionaryGetCount (dict); 53*30fdc8d8SChris Lattner return 0; 54*30fdc8d8SChris Lattner } 55*30fdc8d8SChris Lattner 56*30fdc8d8SChris Lattner CFIndex 57*30fdc8d8SChris Lattner CFCMutableDictionary::GetCountOfKey(const void *key) const 58*30fdc8d8SChris Lattner 59*30fdc8d8SChris Lattner { 60*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = get(); 61*30fdc8d8SChris Lattner if (dict) 62*30fdc8d8SChris Lattner return ::CFDictionaryGetCountOfKey (dict, key); 63*30fdc8d8SChris Lattner return 0; 64*30fdc8d8SChris Lattner } 65*30fdc8d8SChris Lattner 66*30fdc8d8SChris Lattner CFIndex 67*30fdc8d8SChris Lattner CFCMutableDictionary::GetCountOfValue(const void *value) const 68*30fdc8d8SChris Lattner 69*30fdc8d8SChris Lattner { 70*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = get(); 71*30fdc8d8SChris Lattner if (dict) 72*30fdc8d8SChris Lattner return ::CFDictionaryGetCountOfValue (dict, value); 73*30fdc8d8SChris Lattner return 0; 74*30fdc8d8SChris Lattner } 75*30fdc8d8SChris Lattner 76*30fdc8d8SChris Lattner void 77*30fdc8d8SChris Lattner CFCMutableDictionary::GetKeysAndValues(const void **keys, const void **values) const 78*30fdc8d8SChris Lattner { 79*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = get(); 80*30fdc8d8SChris Lattner if (dict) 81*30fdc8d8SChris Lattner ::CFDictionaryGetKeysAndValues (dict, keys, values); 82*30fdc8d8SChris Lattner } 83*30fdc8d8SChris Lattner 84*30fdc8d8SChris Lattner 85*30fdc8d8SChris Lattner const void * 86*30fdc8d8SChris Lattner CFCMutableDictionary::GetValue(const void *key) const 87*30fdc8d8SChris Lattner 88*30fdc8d8SChris Lattner { 89*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = get(); 90*30fdc8d8SChris Lattner if (dict) 91*30fdc8d8SChris Lattner return ::CFDictionaryGetValue (dict, key); 92*30fdc8d8SChris Lattner return NULL; 93*30fdc8d8SChris Lattner } 94*30fdc8d8SChris Lattner 95*30fdc8d8SChris Lattner Boolean 96*30fdc8d8SChris Lattner CFCMutableDictionary::GetValueIfPresent(const void *key, const void **value_handle) const 97*30fdc8d8SChris Lattner { 98*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = get(); 99*30fdc8d8SChris Lattner if (dict) 100*30fdc8d8SChris Lattner return ::CFDictionaryGetValueIfPresent (dict, key, value_handle); 101*30fdc8d8SChris Lattner return false; 102*30fdc8d8SChris Lattner } 103*30fdc8d8SChris Lattner 104*30fdc8d8SChris Lattner 105*30fdc8d8SChris Lattner CFMutableDictionaryRef 106*30fdc8d8SChris Lattner CFCMutableDictionary::Dictionary(bool can_create) 107*30fdc8d8SChris Lattner { 108*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = get(); 109*30fdc8d8SChris Lattner if (can_create && dict == NULL) 110*30fdc8d8SChris Lattner { 111*30fdc8d8SChris Lattner dict = ::CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); 112*30fdc8d8SChris Lattner reset ( dict ); 113*30fdc8d8SChris Lattner } 114*30fdc8d8SChris Lattner return dict; 115*30fdc8d8SChris Lattner } 116*30fdc8d8SChris Lattner 117*30fdc8d8SChris Lattner bool 118*30fdc8d8SChris Lattner CFCMutableDictionary::AddValue(CFStringRef key, const void *value, bool can_create) 119*30fdc8d8SChris Lattner { 120*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 121*30fdc8d8SChris Lattner if (dict != NULL) 122*30fdc8d8SChris Lattner { 123*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 124*30fdc8d8SChris Lattner ::CFDictionaryAddValue (dict, key, value); 125*30fdc8d8SChris Lattner return true; 126*30fdc8d8SChris Lattner } 127*30fdc8d8SChris Lattner return false; 128*30fdc8d8SChris Lattner } 129*30fdc8d8SChris Lattner 130*30fdc8d8SChris Lattner bool 131*30fdc8d8SChris Lattner CFCMutableDictionary::SetValue(CFStringRef key, const void *value, bool can_create) 132*30fdc8d8SChris Lattner { 133*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 134*30fdc8d8SChris Lattner if (dict != NULL) 135*30fdc8d8SChris Lattner { 136*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 137*30fdc8d8SChris Lattner ::CFDictionarySetValue (dict, key, value); 138*30fdc8d8SChris Lattner return true; 139*30fdc8d8SChris Lattner } 140*30fdc8d8SChris Lattner return false; 141*30fdc8d8SChris Lattner } 142*30fdc8d8SChris Lattner 143*30fdc8d8SChris Lattner bool 144*30fdc8d8SChris Lattner CFCMutableDictionary::AddValueSInt8(CFStringRef key, int8_t value, bool can_create) 145*30fdc8d8SChris Lattner { 146*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 147*30fdc8d8SChris Lattner if (dict != NULL) 148*30fdc8d8SChris Lattner { 149*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt8Type, &value)); 150*30fdc8d8SChris Lattner if (cf_number.get()) 151*30fdc8d8SChris Lattner { 152*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 153*30fdc8d8SChris Lattner ::CFDictionaryAddValue (dict, key, cf_number.get()); 154*30fdc8d8SChris Lattner return true; 155*30fdc8d8SChris Lattner } 156*30fdc8d8SChris Lattner } 157*30fdc8d8SChris Lattner return false; 158*30fdc8d8SChris Lattner } 159*30fdc8d8SChris Lattner 160*30fdc8d8SChris Lattner bool 161*30fdc8d8SChris Lattner CFCMutableDictionary::SetValueSInt8(CFStringRef key, int8_t value, bool can_create) 162*30fdc8d8SChris Lattner { 163*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 164*30fdc8d8SChris Lattner if (dict != NULL) 165*30fdc8d8SChris Lattner { 166*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt8Type, &value)); 167*30fdc8d8SChris Lattner if (cf_number.get()) 168*30fdc8d8SChris Lattner { 169*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 170*30fdc8d8SChris Lattner ::CFDictionarySetValue (dict, key, cf_number.get()); 171*30fdc8d8SChris Lattner return true; 172*30fdc8d8SChris Lattner } 173*30fdc8d8SChris Lattner } 174*30fdc8d8SChris Lattner return false; 175*30fdc8d8SChris Lattner } 176*30fdc8d8SChris Lattner 177*30fdc8d8SChris Lattner bool 178*30fdc8d8SChris Lattner CFCMutableDictionary::AddValueSInt16(CFStringRef key, int16_t value, bool can_create) 179*30fdc8d8SChris Lattner { 180*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 181*30fdc8d8SChris Lattner if (dict != NULL) 182*30fdc8d8SChris Lattner { 183*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt16Type, &value)); 184*30fdc8d8SChris Lattner if (cf_number.get()) 185*30fdc8d8SChris Lattner { 186*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 187*30fdc8d8SChris Lattner ::CFDictionaryAddValue (dict, key, cf_number.get()); 188*30fdc8d8SChris Lattner return true; 189*30fdc8d8SChris Lattner } 190*30fdc8d8SChris Lattner } 191*30fdc8d8SChris Lattner return false; 192*30fdc8d8SChris Lattner } 193*30fdc8d8SChris Lattner 194*30fdc8d8SChris Lattner bool 195*30fdc8d8SChris Lattner CFCMutableDictionary::SetValueSInt16(CFStringRef key, int16_t value, bool can_create) 196*30fdc8d8SChris Lattner { 197*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 198*30fdc8d8SChris Lattner if (dict != NULL) 199*30fdc8d8SChris Lattner { 200*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt16Type, &value)); 201*30fdc8d8SChris Lattner if (cf_number.get()) 202*30fdc8d8SChris Lattner { 203*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 204*30fdc8d8SChris Lattner ::CFDictionarySetValue (dict, key, cf_number.get()); 205*30fdc8d8SChris Lattner return true; 206*30fdc8d8SChris Lattner } 207*30fdc8d8SChris Lattner } 208*30fdc8d8SChris Lattner return false; 209*30fdc8d8SChris Lattner } 210*30fdc8d8SChris Lattner 211*30fdc8d8SChris Lattner bool 212*30fdc8d8SChris Lattner CFCMutableDictionary::AddValueSInt32(CFStringRef key, int32_t value, bool can_create) 213*30fdc8d8SChris Lattner { 214*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 215*30fdc8d8SChris Lattner if (dict != NULL) 216*30fdc8d8SChris Lattner { 217*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt32Type, &value)); 218*30fdc8d8SChris Lattner if (cf_number.get()) 219*30fdc8d8SChris Lattner { 220*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 221*30fdc8d8SChris Lattner ::CFDictionaryAddValue (dict, key, cf_number.get()); 222*30fdc8d8SChris Lattner return true; 223*30fdc8d8SChris Lattner } 224*30fdc8d8SChris Lattner } 225*30fdc8d8SChris Lattner return false; 226*30fdc8d8SChris Lattner } 227*30fdc8d8SChris Lattner 228*30fdc8d8SChris Lattner bool 229*30fdc8d8SChris Lattner CFCMutableDictionary::SetValueSInt32(CFStringRef key, int32_t value, bool can_create) 230*30fdc8d8SChris Lattner { 231*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 232*30fdc8d8SChris Lattner if (dict != NULL) 233*30fdc8d8SChris Lattner { 234*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt32Type, &value)); 235*30fdc8d8SChris Lattner if (cf_number.get()) 236*30fdc8d8SChris Lattner { 237*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 238*30fdc8d8SChris Lattner ::CFDictionarySetValue (dict, key, cf_number.get()); 239*30fdc8d8SChris Lattner return true; 240*30fdc8d8SChris Lattner } 241*30fdc8d8SChris Lattner } 242*30fdc8d8SChris Lattner return false; 243*30fdc8d8SChris Lattner } 244*30fdc8d8SChris Lattner 245*30fdc8d8SChris Lattner bool 246*30fdc8d8SChris Lattner CFCMutableDictionary::AddValueSInt64(CFStringRef key, int64_t value, bool can_create) 247*30fdc8d8SChris Lattner { 248*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 249*30fdc8d8SChris Lattner if (dict != NULL) 250*30fdc8d8SChris Lattner { 251*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &value)); 252*30fdc8d8SChris Lattner if (cf_number.get()) 253*30fdc8d8SChris Lattner { 254*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 255*30fdc8d8SChris Lattner ::CFDictionaryAddValue (dict, key, cf_number.get()); 256*30fdc8d8SChris Lattner return true; 257*30fdc8d8SChris Lattner } 258*30fdc8d8SChris Lattner } 259*30fdc8d8SChris Lattner return false; 260*30fdc8d8SChris Lattner } 261*30fdc8d8SChris Lattner 262*30fdc8d8SChris Lattner bool 263*30fdc8d8SChris Lattner CFCMutableDictionary::SetValueSInt64(CFStringRef key, int64_t value, bool can_create) 264*30fdc8d8SChris Lattner { 265*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 266*30fdc8d8SChris Lattner if (dict != NULL) 267*30fdc8d8SChris Lattner { 268*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &value)); 269*30fdc8d8SChris Lattner if (cf_number.get()) 270*30fdc8d8SChris Lattner { 271*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 272*30fdc8d8SChris Lattner ::CFDictionarySetValue (dict, key, cf_number.get()); 273*30fdc8d8SChris Lattner return true; 274*30fdc8d8SChris Lattner } 275*30fdc8d8SChris Lattner } 276*30fdc8d8SChris Lattner return false; 277*30fdc8d8SChris Lattner } 278*30fdc8d8SChris Lattner 279*30fdc8d8SChris Lattner bool 280*30fdc8d8SChris Lattner CFCMutableDictionary::AddValueUInt8(CFStringRef key, uint8_t value, bool can_create) 281*30fdc8d8SChris Lattner { 282*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 283*30fdc8d8SChris Lattner if (dict != NULL) 284*30fdc8d8SChris Lattner { 285*30fdc8d8SChris Lattner // Have to promote to the next size type so things don't appear negative of the MSBit is set... 286*30fdc8d8SChris Lattner int16_t sval = value; 287*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt16Type, &sval)); 288*30fdc8d8SChris Lattner if (cf_number.get()) 289*30fdc8d8SChris Lattner { 290*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 291*30fdc8d8SChris Lattner ::CFDictionaryAddValue (dict, key, cf_number.get()); 292*30fdc8d8SChris Lattner return true; 293*30fdc8d8SChris Lattner } 294*30fdc8d8SChris Lattner } 295*30fdc8d8SChris Lattner return false; 296*30fdc8d8SChris Lattner } 297*30fdc8d8SChris Lattner 298*30fdc8d8SChris Lattner bool 299*30fdc8d8SChris Lattner CFCMutableDictionary::SetValueUInt8(CFStringRef key, uint8_t value, bool can_create) 300*30fdc8d8SChris Lattner { 301*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 302*30fdc8d8SChris Lattner if (dict != NULL) 303*30fdc8d8SChris Lattner { 304*30fdc8d8SChris Lattner // Have to promote to the next size type so things don't appear negative of the MSBit is set... 305*30fdc8d8SChris Lattner int16_t sval = value; 306*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt16Type, &sval)); 307*30fdc8d8SChris Lattner if (cf_number.get()) 308*30fdc8d8SChris Lattner { 309*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 310*30fdc8d8SChris Lattner ::CFDictionarySetValue (dict, key, cf_number.get()); 311*30fdc8d8SChris Lattner return true; 312*30fdc8d8SChris Lattner } 313*30fdc8d8SChris Lattner } 314*30fdc8d8SChris Lattner return false; 315*30fdc8d8SChris Lattner } 316*30fdc8d8SChris Lattner 317*30fdc8d8SChris Lattner 318*30fdc8d8SChris Lattner bool 319*30fdc8d8SChris Lattner CFCMutableDictionary::AddValueUInt16(CFStringRef key, uint16_t value, bool can_create) 320*30fdc8d8SChris Lattner { 321*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 322*30fdc8d8SChris Lattner if (dict != NULL) 323*30fdc8d8SChris Lattner { 324*30fdc8d8SChris Lattner // Have to promote to the next size type so things don't appear negative of the MSBit is set... 325*30fdc8d8SChris Lattner int32_t sval = value; 326*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt32Type, &sval)); 327*30fdc8d8SChris Lattner if (cf_number.get()) 328*30fdc8d8SChris Lattner { 329*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 330*30fdc8d8SChris Lattner ::CFDictionaryAddValue (dict, key, cf_number.get()); 331*30fdc8d8SChris Lattner return true; 332*30fdc8d8SChris Lattner } 333*30fdc8d8SChris Lattner } 334*30fdc8d8SChris Lattner return false; 335*30fdc8d8SChris Lattner } 336*30fdc8d8SChris Lattner 337*30fdc8d8SChris Lattner bool 338*30fdc8d8SChris Lattner CFCMutableDictionary::SetValueUInt16(CFStringRef key, uint16_t value, bool can_create) 339*30fdc8d8SChris Lattner { 340*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 341*30fdc8d8SChris Lattner if (dict != NULL) 342*30fdc8d8SChris Lattner { 343*30fdc8d8SChris Lattner // Have to promote to the next size type so things don't appear negative of the MSBit is set... 344*30fdc8d8SChris Lattner int32_t sval = value; 345*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt32Type, &sval)); 346*30fdc8d8SChris Lattner if (cf_number.get()) 347*30fdc8d8SChris Lattner { 348*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 349*30fdc8d8SChris Lattner ::CFDictionarySetValue (dict, key, cf_number.get()); 350*30fdc8d8SChris Lattner return true; 351*30fdc8d8SChris Lattner } 352*30fdc8d8SChris Lattner } 353*30fdc8d8SChris Lattner return false; 354*30fdc8d8SChris Lattner } 355*30fdc8d8SChris Lattner 356*30fdc8d8SChris Lattner bool 357*30fdc8d8SChris Lattner CFCMutableDictionary::AddValueUInt32(CFStringRef key, uint32_t value, bool can_create) 358*30fdc8d8SChris Lattner { 359*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 360*30fdc8d8SChris Lattner if (dict != NULL) 361*30fdc8d8SChris Lattner { 362*30fdc8d8SChris Lattner // Have to promote to the next size type so things don't appear negative of the MSBit is set... 363*30fdc8d8SChris Lattner int64_t sval = value; 364*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &sval)); 365*30fdc8d8SChris Lattner if (cf_number.get()) 366*30fdc8d8SChris Lattner { 367*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 368*30fdc8d8SChris Lattner ::CFDictionaryAddValue (dict, key, cf_number.get()); 369*30fdc8d8SChris Lattner return true; 370*30fdc8d8SChris Lattner } 371*30fdc8d8SChris Lattner } 372*30fdc8d8SChris Lattner return false; 373*30fdc8d8SChris Lattner } 374*30fdc8d8SChris Lattner 375*30fdc8d8SChris Lattner bool 376*30fdc8d8SChris Lattner CFCMutableDictionary::SetValueUInt32(CFStringRef key, uint32_t value, bool can_create) 377*30fdc8d8SChris Lattner { 378*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 379*30fdc8d8SChris Lattner if (dict != NULL) 380*30fdc8d8SChris Lattner { 381*30fdc8d8SChris Lattner // Have to promote to the next size type so things don't appear negative of the MSBit is set... 382*30fdc8d8SChris Lattner int64_t sval = value; 383*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &sval)); 384*30fdc8d8SChris Lattner if (cf_number.get()) 385*30fdc8d8SChris Lattner { 386*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 387*30fdc8d8SChris Lattner ::CFDictionarySetValue (dict, key, cf_number.get()); 388*30fdc8d8SChris Lattner return true; 389*30fdc8d8SChris Lattner } 390*30fdc8d8SChris Lattner } 391*30fdc8d8SChris Lattner return false; 392*30fdc8d8SChris Lattner } 393*30fdc8d8SChris Lattner 394*30fdc8d8SChris Lattner 395*30fdc8d8SChris Lattner bool 396*30fdc8d8SChris Lattner CFCMutableDictionary::AddValueUInt64(CFStringRef key, uint64_t value, bool can_create) 397*30fdc8d8SChris Lattner { 398*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 399*30fdc8d8SChris Lattner if (dict != NULL) 400*30fdc8d8SChris Lattner { 401*30fdc8d8SChris Lattner // The number may appear negative if the MSBit is set in "value". Due to a limitation of 402*30fdc8d8SChris Lattner // CFNumber, there isn't a way to have it show up otherwise as of this writing. 403*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &value)); 404*30fdc8d8SChris Lattner if (cf_number.get()) 405*30fdc8d8SChris Lattner { 406*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 407*30fdc8d8SChris Lattner ::CFDictionaryAddValue (dict, key, cf_number.get()); 408*30fdc8d8SChris Lattner return true; 409*30fdc8d8SChris Lattner } 410*30fdc8d8SChris Lattner } 411*30fdc8d8SChris Lattner return false; 412*30fdc8d8SChris Lattner } 413*30fdc8d8SChris Lattner 414*30fdc8d8SChris Lattner 415*30fdc8d8SChris Lattner bool 416*30fdc8d8SChris Lattner CFCMutableDictionary::SetValueUInt64(CFStringRef key, uint64_t value, bool can_create) 417*30fdc8d8SChris Lattner { 418*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 419*30fdc8d8SChris Lattner if (dict != NULL) 420*30fdc8d8SChris Lattner { 421*30fdc8d8SChris Lattner // The number may appear negative if the MSBit is set in "value". Due to a limitation of 422*30fdc8d8SChris Lattner // CFNumber, there isn't a way to have it show up otherwise as of this writing. 423*30fdc8d8SChris Lattner CFCReleaser<CFNumberRef> cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &value)); 424*30fdc8d8SChris Lattner if (cf_number.get()) 425*30fdc8d8SChris Lattner { 426*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 427*30fdc8d8SChris Lattner ::CFDictionarySetValue (dict, key, cf_number.get()); 428*30fdc8d8SChris Lattner return true; 429*30fdc8d8SChris Lattner } 430*30fdc8d8SChris Lattner } 431*30fdc8d8SChris Lattner return false; 432*30fdc8d8SChris Lattner } 433*30fdc8d8SChris Lattner 434*30fdc8d8SChris Lattner bool 435*30fdc8d8SChris Lattner CFCMutableDictionary::AddValueCString(CFStringRef key, const char *cstr, bool can_create) 436*30fdc8d8SChris Lattner { 437*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 438*30fdc8d8SChris Lattner if (dict != NULL) 439*30fdc8d8SChris Lattner { 440*30fdc8d8SChris Lattner CFCString cf_str(cstr, kCFStringEncodingUTF8); 441*30fdc8d8SChris Lattner if (cf_str.get()) 442*30fdc8d8SChris Lattner { 443*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 444*30fdc8d8SChris Lattner ::CFDictionaryAddValue (dict, key, cf_str.get()); 445*30fdc8d8SChris Lattner return true; 446*30fdc8d8SChris Lattner } 447*30fdc8d8SChris Lattner } 448*30fdc8d8SChris Lattner return false; 449*30fdc8d8SChris Lattner } 450*30fdc8d8SChris Lattner 451*30fdc8d8SChris Lattner bool 452*30fdc8d8SChris Lattner CFCMutableDictionary::SetValueCString(CFStringRef key, const char *cstr, bool can_create) 453*30fdc8d8SChris Lattner { 454*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = Dictionary(can_create); 455*30fdc8d8SChris Lattner if (dict != NULL) 456*30fdc8d8SChris Lattner { 457*30fdc8d8SChris Lattner CFCString cf_str(cstr, kCFStringEncodingUTF8); 458*30fdc8d8SChris Lattner if (cf_str.get()) 459*30fdc8d8SChris Lattner { 460*30fdc8d8SChris Lattner // Let the dictionary own the CFNumber 461*30fdc8d8SChris Lattner ::CFDictionarySetValue (dict, key, cf_str.get()); 462*30fdc8d8SChris Lattner return true; 463*30fdc8d8SChris Lattner } 464*30fdc8d8SChris Lattner } 465*30fdc8d8SChris Lattner return false; 466*30fdc8d8SChris Lattner } 467*30fdc8d8SChris Lattner 468*30fdc8d8SChris Lattner 469*30fdc8d8SChris Lattner void 470*30fdc8d8SChris Lattner CFCMutableDictionary::RemoveAllValues() 471*30fdc8d8SChris Lattner { 472*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = get(); 473*30fdc8d8SChris Lattner if (dict) 474*30fdc8d8SChris Lattner ::CFDictionaryRemoveAllValues(dict); 475*30fdc8d8SChris Lattner } 476*30fdc8d8SChris Lattner 477*30fdc8d8SChris Lattner void 478*30fdc8d8SChris Lattner CFCMutableDictionary::RemoveValue(const void *value) 479*30fdc8d8SChris Lattner { 480*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = get(); 481*30fdc8d8SChris Lattner if (dict) 482*30fdc8d8SChris Lattner ::CFDictionaryRemoveValue(dict, value); 483*30fdc8d8SChris Lattner } 484*30fdc8d8SChris Lattner void 485*30fdc8d8SChris Lattner CFCMutableDictionary::ReplaceValue(const void *key, const void *value) 486*30fdc8d8SChris Lattner { 487*30fdc8d8SChris Lattner CFMutableDictionaryRef dict = get(); 488*30fdc8d8SChris Lattner if (dict) 489*30fdc8d8SChris Lattner ::CFDictionaryReplaceValue (dict, key, value); 490*30fdc8d8SChris Lattner } 491*30fdc8d8SChris Lattner 492