| //===-- 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<CFMutableDictionaryRef> (s) |
| { |
| } |
| |
| //---------------------------------------------------------------------- |
| // CFCMutableDictionary copy constructor |
| //---------------------------------------------------------------------- |
| CFCMutableDictionary::CFCMutableDictionary(const CFCMutableDictionary& rhs) : |
| CFCReleaser<CFMutableDictionaryRef> (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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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<CFNumberRef> 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::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); |
| } |
| |