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 + -
显示快捷键?