osxlocalepeer.cpp
来自「这是VCF框架的代码」· C++ 代码 · 共 915 行 · 第 1/3 页
CPP
915 行
if ( NULL == integerNumFormatterRef_ ) { throw RuntimeException( MAKE_ERROR_MSG_2( "CFNumberFormatterCreate failed for locale " + name ) ); } realNumFormatterRef_ = CFNumberFormatterCreate( kCFAllocatorDefault, localeRef_, kCFNumberFormatterDecimalStyle ); if ( NULL == realNumFormatterRef_ ) { throw RuntimeException( MAKE_ERROR_MSG_2( "CFNumberFormatterCreate failed for locale " + name ) ); } currencyNumFormatterRef_ = CFNumberFormatterCreate( kCFAllocatorDefault, localeRef_, kCFNumberFormatterCurrencyStyle ); if ( NULL == currencyNumFormatterRef_ ) { throw RuntimeException( MAKE_ERROR_MSG_2( "CFNumberFormatterCreate failed for locale " + name ) ); } }OSXLocalePeer::~OSXLocalePeer(){ if ( NULL != localeRef_ ) { CFRelease( localeRef_ ); localeRef_ = NULL; } if ( NULL != integerNumFormatterRef_ ) { CFRelease( integerNumFormatterRef_ ); integerNumFormatterRef_ = NULL; } if ( NULL != realNumFormatterRef_ ) { CFRelease( realNumFormatterRef_ ); realNumFormatterRef_ = NULL; } if ( NULL != currencyNumFormatterRef_ ) { CFRelease( currencyNumFormatterRef_ ); currencyNumFormatterRef_ = NULL; }}int OSXLocalePeer::collate( const UnicodeString& s1, const UnicodeString& s2 ){ int result = 0; CollatorRef collatorRef = 0; OSStatus err = UCCreateCollator( collateLocaleRef_, 0, 0, &collatorRef ); if ( err == noErr ) { Boolean matched = FALSE; SInt32 order = 0; UCCompareText( collatorRef, s1.c_str(), s1.length(), s2.c_str(), s2.length(), &matched, &order ); if ( order < 0 ) { result = -1; } else if ( order == 0 ) { result = 0; } else if ( order > 0 ) { result = 1; } UCDisposeCollator( &collatorRef ); } return result;}int OSXLocalePeer::collateCaseInsensitive( const UnicodeString& s1, const UnicodeString& s2 ){ int result = 0; CollatorRef collatorRef = 0; OSStatus err = UCCreateCollator( collateLocaleRef_, 0, kUCCollateCaseInsensitiveMask, &collatorRef ); if ( err == noErr ) { Boolean matched = FALSE; SInt32 order = 0; UCCompareText( collatorRef, s1.c_str(), s1.length(), s2.c_str(), s2.length(), &matched, &order ); if ( order < 0 ) { result = -1; } else if ( order == 0 ) { result = 0; } else if ( order > 0 ) { result = 1; } UCDisposeCollator( &collatorRef ); } return result;}UnicodeString OSXLocalePeer::toString( const int& val ){ CFTextString result; result = CFNumberFormatterCreateStringWithValue( NULL, integerNumFormatterRef_, kCFNumberIntType, &val ); return result;}UnicodeString OSXLocalePeer::toString( const unsigned int& val ){ CFTextString result; double tmp = val; result = CFNumberFormatterCreateStringWithValue( NULL, integerNumFormatterRef_, kCFNumberDoubleType, &tmp ); return result;}UnicodeString OSXLocalePeer::toString( const long& val ){ CFTextString result; result = CFNumberFormatterCreateStringWithValue( NULL, integerNumFormatterRef_, kCFNumberLongType, &val ); return result;}UnicodeString OSXLocalePeer::toString( const unsigned long& val ){ CFTextString result; double tmp = val; result = CFNumberFormatterCreateStringWithValue( NULL, integerNumFormatterRef_, kCFNumberDoubleType, &tmp ); return result;}UnicodeString OSXLocalePeer::toString( const double& val ){ CFTextString result; result = CFNumberFormatterCreateStringWithValue( NULL, realNumFormatterRef_, kCFNumberDoubleType, &val ); return result;}UnicodeString OSXLocalePeer::toString( const float& val ){ CFTextString result; result = CFNumberFormatterCreateStringWithValue( NULL, realNumFormatterRef_, kCFNumberFloatType, &val ); return result;}UnicodeString OSXLocalePeer::toStringFromCurrency( const double& val ){ CFTextString result; result = CFNumberFormatterCreateStringWithValue( NULL, currencyNumFormatterRef_, kCFNumberDoubleType, &val ); return result;}int OSXLocalePeer::toInt( const UnicodeString& str ){ int result = 0; CFTextString tmp(str); CFRefObject<CFNumberRef> num = CFNumberFormatterCreateNumberFromString( kCFAllocatorDefault, integerNumFormatterRef_, tmp, NULL, kCFNumberFormatterParseIntegersOnly ); if ( NULL != num ) { if ( !CFNumberGetValue( num, kCFNumberIntType, &result ) ) { result = StringUtils::fromStringAsInt( str ); } } return result;}unsigned int OSXLocalePeer::toUInt( const UnicodeString& str ){ unsigned int result = 0; CFTextString tmp(str); CFRefObject<CFNumberRef> num = CFNumberFormatterCreateNumberFromString( kCFAllocatorDefault, integerNumFormatterRef_, tmp, NULL, kCFNumberFormatterParseIntegersOnly ); if ( NULL != num ) { double val = 0; if ( CFNumberGetValue( num, kCFNumberDoubleType, &val ) ) { result = (unsigned int)val; } else { result = StringUtils::fromStringAsUInt( str ); } } return result;}double OSXLocalePeer::toDouble( const UnicodeString& str ){ double result = 0; CFTextString tmp(str); CFRefObject<CFNumberRef> num = CFNumberFormatterCreateNumberFromString( kCFAllocatorDefault, realNumFormatterRef_, tmp, NULL, kCFNumberFormatterParseIntegersOnly ); if ( NULL != num ) { if ( !CFNumberGetValue( num, kCFNumberDoubleType, &result ) ) { result = StringUtils::fromStringAsDouble( str ); } } return result;}float OSXLocalePeer::toFloat( const UnicodeString& str ){ float result = 0; CFTextString tmp(str); CFRefObject<CFNumberRef> num = CFNumberFormatterCreateNumberFromString( kCFAllocatorDefault, realNumFormatterRef_, tmp, NULL, kCFNumberFormatterParseIntegersOnly ); if ( NULL != num ) { if ( !CFNumberGetValue( num, kCFNumberFloatType, &result ) ) { result = StringUtils::fromStringAsFloat( str ); } } return result;}double OSXLocalePeer::toDoubleAsCurrency( const UnicodeString& str ){ double result = StringUtils::fromStringAsDouble( str ); return result;}UnicodeString OSXLocalePeer::toLowerCase( const UnicodeString& s ){ CFTextString result(s); CFStringLowercase( result, localeRef_ ); CFStringRef tmp = CFStringCreateCopy(NULL,result); result = tmp; CFRelease(tmp); return result;}UnicodeString OSXLocalePeer::toUpperCase( const UnicodeString& s ){ CFTextString result(s); CFStringUppercase( result, localeRef_ ); CFStringRef tmp = CFStringCreateCopy(NULL,result); result = tmp; CFRelease(tmp); return result;}UnicodeString OSXLocalePeer::getNumberThousandsSeparator(){ CFTextString prop; prop = (CFStringRef) CFNumberFormatterCopyProperty( currencyNumFormatterRef_, kCFNumberFormatterGroupingSeparator ); return prop;}UnicodeString OSXLocalePeer::getNumberDecimalPoint(){ CFTextString prop; prop = (CFStringRef) CFNumberFormatterCopyProperty( currencyNumFormatterRef_, kCFNumberFormatterDecimalSeparator ); return prop;}UnicodeString OSXLocalePeer::getNumberGrouping(){ UnicodeString result; CFRefObject<CFNumberRef> prop; prop = (CFNumberRef) CFNumberFormatterCopyProperty( currencyNumFormatterRef_, kCFNumberFormatterGroupingSize ); if ( prop ) { int val=0; if ( CFNumberGetValue( prop, kCFNumberIntType, &val ) ) { char tmp[256]; sprintf(tmp,"%d", val ); result = tmp; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?