//===-- CFCMutableDictionary.cpp --------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "CFCMutableDictionary.h" #include "CFCString.h" //---------------------------------------------------------------------- // CFCString constructor //---------------------------------------------------------------------- CFCMutableDictionary::CFCMutableDictionary(CFMutableDictionaryRef s) : CFCReleaser (s) { } //---------------------------------------------------------------------- // CFCMutableDictionary copy constructor //---------------------------------------------------------------------- CFCMutableDictionary::CFCMutableDictionary(const CFCMutableDictionary& rhs) : CFCReleaser (rhs) { } //---------------------------------------------------------------------- // CFCMutableDictionary copy constructor //---------------------------------------------------------------------- const CFCMutableDictionary& CFCMutableDictionary::operator=(const CFCMutableDictionary& rhs) { if (this != &rhs) *this = rhs; return *this; } //---------------------------------------------------------------------- // Destructor //---------------------------------------------------------------------- CFCMutableDictionary::~CFCMutableDictionary() { } CFIndex CFCMutableDictionary::GetCount() const { CFMutableDictionaryRef dict = get(); if (dict) return ::CFDictionaryGetCount (dict); return 0; } CFIndex CFCMutableDictionary::GetCountOfKey(const void *key) const { CFMutableDictionaryRef dict = get(); if (dict) return ::CFDictionaryGetCountOfKey (dict, key); return 0; } CFIndex CFCMutableDictionary::GetCountOfValue(const void *value) const { CFMutableDictionaryRef dict = get(); if (dict) return ::CFDictionaryGetCountOfValue (dict, value); return 0; } void CFCMutableDictionary::GetKeysAndValues(const void **keys, const void **values) const { CFMutableDictionaryRef dict = get(); if (dict) ::CFDictionaryGetKeysAndValues (dict, keys, values); } const void * CFCMutableDictionary::GetValue(const void *key) const { CFMutableDictionaryRef dict = get(); if (dict) return ::CFDictionaryGetValue (dict, key); return NULL; } Boolean CFCMutableDictionary::GetValueIfPresent(const void *key, const void **value_handle) const { CFMutableDictionaryRef dict = get(); if (dict) return ::CFDictionaryGetValueIfPresent (dict, key, value_handle); return false; } CFMutableDictionaryRef CFCMutableDictionary::Dictionary(bool can_create) { CFMutableDictionaryRef dict = get(); if (can_create && dict == NULL) { dict = ::CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); reset ( dict ); } return dict; } bool CFCMutableDictionary::AddValue(CFStringRef key, const void *value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, value); return true; } return false; } bool CFCMutableDictionary::SetValue(CFStringRef key, const void *value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, value); return true; } return false; } bool CFCMutableDictionary::AddValueSInt8(CFStringRef key, int8_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt8Type, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::SetValueSInt8(CFStringRef key, int8_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt8Type, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::AddValueSInt16(CFStringRef key, int16_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt16Type, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::SetValueSInt16(CFStringRef key, int16_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt16Type, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::AddValueSInt32(CFStringRef key, int32_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt32Type, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::SetValueSInt32(CFStringRef key, int32_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt32Type, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::AddValueSInt64(CFStringRef key, int64_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::SetValueSInt64(CFStringRef key, int64_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::AddValueUInt8(CFStringRef key, uint8_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // Have to promote to the next size type so things don't appear negative of the MSBit is set... int16_t sval = value; CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt16Type, &sval)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::SetValueUInt8(CFStringRef key, uint8_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // Have to promote to the next size type so things don't appear negative of the MSBit is set... int16_t sval = value; CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt16Type, &sval)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::AddValueUInt16(CFStringRef key, uint16_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // Have to promote to the next size type so things don't appear negative of the MSBit is set... int32_t sval = value; CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt32Type, &sval)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::SetValueUInt16(CFStringRef key, uint16_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // Have to promote to the next size type so things don't appear negative of the MSBit is set... int32_t sval = value; CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt32Type, &sval)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::AddValueUInt32(CFStringRef key, uint32_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // Have to promote to the next size type so things don't appear negative of the MSBit is set... int64_t sval = value; CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &sval)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::SetValueUInt32(CFStringRef key, uint32_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // Have to promote to the next size type so things don't appear negative of the MSBit is set... int64_t sval = value; CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &sval)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::AddValueUInt64(CFStringRef key, uint64_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // The number may appear negative if the MSBit is set in "value". Due to a limitation of // CFNumber, there isn't a way to have it show up otherwise as of this writing. CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::SetValueUInt64(CFStringRef key, uint64_t value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // The number may appear negative if the MSBit is set in "value". Due to a limitation of // CFNumber, there isn't a way to have it show up otherwise as of this writing. CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberSInt64Type, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::AddValueDouble(CFStringRef key, double value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // The number may appear negative if the MSBit is set in "value". Due to a limitation of // CFNumber, there isn't a way to have it show up otherwise as of this writing. CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberDoubleType, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::SetValueDouble(CFStringRef key, double value, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { // The number may appear negative if the MSBit is set in "value". Due to a limitation of // CFNumber, there isn't a way to have it show up otherwise as of this writing. CFCReleaser cf_number(::CFNumberCreate (kCFAllocatorDefault, kCFNumberDoubleType, &value)); if (cf_number.get()) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, cf_number.get()); return true; } } return false; } bool CFCMutableDictionary::AddValueCString(CFStringRef key, const char *cstr, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { CFCString cf_str(cstr, kCFStringEncodingUTF8); if (cf_str.get()) { // Let the dictionary own the CFNumber ::CFDictionaryAddValue (dict, key, cf_str.get()); return true; } } return false; } bool CFCMutableDictionary::SetValueCString(CFStringRef key, const char *cstr, bool can_create) { CFMutableDictionaryRef dict = Dictionary(can_create); if (dict != NULL) { CFCString cf_str(cstr, kCFStringEncodingUTF8); if (cf_str.get()) { // Let the dictionary own the CFNumber ::CFDictionarySetValue (dict, key, cf_str.get()); return true; } } return false; } void CFCMutableDictionary::RemoveAllValues() { CFMutableDictionaryRef dict = get(); if (dict) ::CFDictionaryRemoveAllValues(dict); } void CFCMutableDictionary::RemoveValue(const void *value) { CFMutableDictionaryRef dict = get(); if (dict) ::CFDictionaryRemoveValue(dict, value); } void CFCMutableDictionary::ReplaceValue(const void *key, const void *value) { CFMutableDictionaryRef dict = get(); if (dict) ::CFDictionaryReplaceValue (dict, key, value); }