From: aroben@apple.com Date: Sat, 1 Mar 2008 00:13:46 +0000 (+0000) Subject: Refactor value <-> CFNumber conversions into some helper functions X-Git-Url: https://git.webkit.org/?p=WebKit-https.git;a=commitdiff_plain;h=948bb3ea894444bc35802a72cb0dd30ff50aa791;ds=inline Refactor value <-> CFNumber conversions into some helper functions Reviewed by Jon. * WebPreferences.cpp: (preferencesPath): Changed to return a const String&. (numberValueForPreferencesValue): Converts a value from preferences to a native numeric type. (cfNumber): Converts a native numeric value to a CFNumberRef. (booleanValueForPreferencesValue): Converts a value from preferences to a native boolean. (WebPreferences::integerValueForKey): Changed to call numberValueForPreferencesValue. (WebPreferences::floatValueForKey): Ditto. (WebPreferences::boolValueForKey): Changed to call booleanValueForPreferencesValue. (WebPreferences::setIntegerValue): Changed to call cfNumber. (WebPreferences::setLongLongValue): Ditto. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@30683 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- diff --git a/WebKit/win/ChangeLog b/WebKit/win/ChangeLog index da034b617170..73c5a64f0b6b 100644 --- a/WebKit/win/ChangeLog +++ b/WebKit/win/ChangeLog @@ -1,3 +1,24 @@ +2008-02-28 Adam Roben + + Refactor value <-> CFNumber conversions into some helper functions + + Reviewed by Jon. + + * WebPreferences.cpp: + (preferencesPath): Changed to return a const String&. + (numberValueForPreferencesValue): Converts a value from preferences to + a native numeric type. + (cfNumber): Converts a native numeric value to a CFNumberRef. + (booleanValueForPreferencesValue): Converts a value from preferences + to a native boolean. + (WebPreferences::integerValueForKey): Changed to call + numberValueForPreferencesValue. + (WebPreferences::floatValueForKey): Ditto. + (WebPreferences::boolValueForKey): Changed to call + booleanValueForPreferencesValue. + (WebPreferences::setIntegerValue): Changed to call cfNumber. + (WebPreferences::setLongLongValue): Ditto. + 2008-02-27 Adam Roben Add WebPreferences::setValueForKey diff --git a/WebKit/win/WebPreferences.cpp b/WebKit/win/WebPreferences.cpp index ceedc6711914..3fc42acc8517 100644 --- a/WebKit/win/WebPreferences.cpp +++ b/WebKit/win/WebPreferences.cpp @@ -53,12 +53,49 @@ using namespace WebCore; -static String preferencesPath() +static const String& preferencesPath() { static String path = pathByAppendingComponent(roamingUserSpecificStorageDirectory(), "WebKitPreferences.plist"); return path; } +template struct CFNumberTraits { static const unsigned Type; }; +template<> struct CFNumberTraits { static const unsigned Type = kCFNumberSInt32Type; }; +template<> struct CFNumberTraits { static const unsigned Type = kCFNumberLongLongType; }; +template<> struct CFNumberTraits { static const unsigned Type = kCFNumberFloat32Type; }; + +template +static NumberType numberValueForPreferencesValue(CFPropertyListRef value) +{ + if (!value) + return 0; + + CFTypeID cfType = CFGetTypeID(value); + if (cfType == CFStringGetTypeID()) + return static_cast(CFStringGetIntValue(static_cast(value))); + else if (cfType == CFBooleanGetTypeID()) { + Boolean boolVal = CFBooleanGetValue(static_cast(value)); + return boolVal ? 1 : 0; + } else if (cfType == CFNumberGetTypeID()) { + NumberType val = 0; + CFNumberGetValue(static_cast(value), CFNumberTraits::Type, &val); + return val; + } + + return 0; +} + +template +static RetainPtr cfNumber(NumberType value) +{ + return RetainPtr(AdoptCF, CFNumberCreate(0, CFNumberTraits::Type, &value)); +} + +static bool booleanValueForPreferencesValue(CFPropertyListRef value) +{ + return numberValueForPreferencesValue(value); +} + // WebPreferences ---------------------------------------------------------------- static CFDictionaryRef defaultSettings; @@ -240,73 +277,22 @@ BSTR WebPreferences::stringValueForKey(CFStringRef key) int WebPreferences::integerValueForKey(CFStringRef key) { - CFTypeRef cfVal = (CFStringRef)valueForKey(key); - if (!cfVal) - return 0; - - CFTypeID cfType = CFGetTypeID(cfVal); - if (cfType == CFStringGetTypeID()) - return CFStringGetIntValue((CFStringRef)cfVal); - else if (cfType == CFBooleanGetTypeID()) { - Boolean boolVal = CFBooleanGetValue((CFBooleanRef)cfVal); - return (boolVal) ? 1 : 0; - } - else if (cfType == CFNumberGetTypeID()) { - int val = 0; - CFNumberGetValue((CFNumberRef)cfVal, kCFNumberSInt32Type, &val); - return val; - } - - return 0; + return numberValueForPreferencesValue(valueForKey(key)); } BOOL WebPreferences::boolValueForKey(CFStringRef key) { - return (integerValueForKey(key) != 0); + return booleanValueForPreferencesValue(valueForKey(key)); } float WebPreferences::floatValueForKey(CFStringRef key) { - CFTypeRef cfVal = (CFStringRef)valueForKey(key); - if (!cfVal) - return 0.0; - - CFTypeID cfType = CFGetTypeID(cfVal); - if (cfType == CFStringGetTypeID()) - return (float)CFStringGetDoubleValue((CFStringRef)cfVal); - else if (cfType == CFBooleanGetTypeID()) { - Boolean boolVal = CFBooleanGetValue((CFBooleanRef)cfVal); - return (boolVal) ? 1.0f : 0.0f; - } - else if (cfType == CFNumberGetTypeID()) { - float val = 0.0; - CFNumberGetValue((CFNumberRef)cfVal, kCFNumberFloatType, &val); - return val; - } - - return 0.0; + return numberValueForPreferencesValue(valueForKey(key)); } LONGLONG WebPreferences::longlongValueForKey(CFStringRef key) { - CFTypeRef cfVal = (CFTypeRef) valueForKey(key); - if (!cfVal) - return 0; - - CFTypeID cfType = CFGetTypeID(cfVal); - if (cfType == CFStringGetTypeID()) - return (LONGLONG) CFStringGetIntValue((CFStringRef)cfVal); - else if (cfType == CFBooleanGetTypeID()) { - Boolean boolVal = CFBooleanGetValue((CFBooleanRef)cfVal); - return (boolVal) ? 1 : 0; - } - else if (cfType == CFNumberGetTypeID()) { - LONGLONG val = 0; - CFNumberGetValue((CFNumberRef)cfVal, kCFNumberLongLongType, &val); - return val; - } - - return 0; + return numberValueForPreferencesValue(valueForKey(key)); } void WebPreferences::setStringValue(CFStringRef key, LPCTSTR value) @@ -328,8 +314,7 @@ void WebPreferences::setIntegerValue(CFStringRef key, int value) if (integerValueForKey(key) == value) return; - RetainPtr valueRef(AdoptCF, CFNumberCreate(0, kCFNumberSInt32Type, &value)); - setValueForKey(key, valueRef.get()); + setValueForKey(key, cfNumber(value).get()); postPreferencesChangesNotification(); } @@ -349,8 +334,7 @@ void WebPreferences::setLongLongValue(CFStringRef key, LONGLONG value) if (longlongValueForKey(key) == value) return; - RetainPtr valueRef(AdoptCF, CFNumberCreate(0, kCFNumberLongLongType, &value)); - setValueForKey(key, valueRef.get()); + setValueForKey(key, cfNumber(value).get()); postPreferencesChangesNotification(); }