blob: bce023bfd616ebf44e6d27fb31776ad88cc65f5e [file] [log] [blame]
//===-- 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);
}