diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
| commit | 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch) | |
| tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /source/Host/macosx/cfcpp/CFCMutableDictionary.cpp | |
| parent | 3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff) | |
Notes
Diffstat (limited to 'source/Host/macosx/cfcpp/CFCMutableDictionary.cpp')
| -rw-r--r-- | source/Host/macosx/cfcpp/CFCMutableDictionary.cpp | 529 | 
1 files changed, 529 insertions, 0 deletions
| diff --git a/source/Host/macosx/cfcpp/CFCMutableDictionary.cpp b/source/Host/macosx/cfcpp/CFCMutableDictionary.cpp new file mode 100644 index 0000000000000..bce023bfd616e --- /dev/null +++ b/source/Host/macosx/cfcpp/CFCMutableDictionary.cpp @@ -0,0 +1,529 @@ +//===-- 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::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<CFNumberRef> 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<CFNumberRef> 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); +} + | 
