mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-11 16:50:42 +00:00
Added untest implementation of -getObjectValue:forString:range:error:. This method should will be used to implement -getObjectValue:forString:errorDescription:.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@32586 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
ed8ac51207
commit
c84d67c662
3 changed files with 77 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
|||
2011-03-14 Stefan Bidigaray <stefanbidi@gmail.com>
|
||||
|
||||
* Source/NSNumberFormatter.m (-getObjectValue:forString:range:error:):
|
||||
Added implementation.
|
||||
* Headers/NSNumberFormatter.h: Fixed a couple of typos.
|
||||
|
||||
2011-03-14 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
||||
* Resources/GNUmakefile
|
||||
|
|
|
@ -385,7 +385,7 @@ GS_NSNumberFormatter_IVARS;
|
|||
- (void) setNumberStyle: (NSNumberFormatterStyle) style;
|
||||
- (NSNumberFormatterStyle) numberStyle;
|
||||
- (void) setGeneratesDecimalNumbers: (BOOL) flag;
|
||||
- (BOOL) generatesDecimalNubmers;
|
||||
- (BOOL) generatesDecimalNumbers;
|
||||
|
||||
- (void) setLocale: (NSLocale *) locale;
|
||||
- (NSLocale *) locale;
|
||||
|
@ -487,7 +487,7 @@ GS_NSNumberFormatter_IVARS;
|
|||
|
||||
- (BOOL) getObjectValue: (out id *) anObject
|
||||
forString: (NSString *) aString
|
||||
range: (NSRange) rangep
|
||||
range: (NSRange *) rangep
|
||||
error: (out NSError **) error;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1375,9 +1375,9 @@ static NSUInteger _defaultBehavior = NSNumberFormatterBehavior10_4;
|
|||
internal->_genDecimal = flag;
|
||||
}
|
||||
|
||||
- (BOOL) generatesDecimalNubmers
|
||||
- (BOOL) generatesDecimalNumbers
|
||||
{
|
||||
return NO; // FIXME
|
||||
return internal->_genDecimal; // FIXME
|
||||
}
|
||||
|
||||
|
||||
|
@ -2118,10 +2118,76 @@ static NSUInteger _defaultBehavior = NSNumberFormatterBehavior10_4;
|
|||
|
||||
- (BOOL) getObjectValue: (out id *) anObject
|
||||
forString: (NSString *) aString
|
||||
range: (NSRange) rangep
|
||||
range: (NSRange *) rangep
|
||||
error: (out NSError **) error
|
||||
{
|
||||
#if GS_USE_ICU == 1
|
||||
BOOL result;
|
||||
BOOL genDec = [self generatesDecimalNumbers];
|
||||
NSUInteger inLen;
|
||||
int32_t parsePos = rangep->location;
|
||||
UChar inBuffer[BUFFER_SIZE];
|
||||
UErrorCode err = U_ZERO_ERROR;
|
||||
|
||||
inLen = [aString length];
|
||||
if (inLen > BUFFER_SIZE)
|
||||
inLen = BUFFER_SIZE;
|
||||
[aString getCharacters: inBuffer range: NSMakeRange(0, inLen)];
|
||||
|
||||
if (genDec) // Generate decimal number? This should be the default.
|
||||
{
|
||||
int32_t outLen;
|
||||
char outBuffer[BUFFER_SIZE];
|
||||
|
||||
outLen =
|
||||
unum_parseDecimal (internal->_formatter, inBuffer, inLen, &parsePos,
|
||||
outBuffer, BUFFER_SIZE-1, &err);
|
||||
if (U_SUCCESS(err))
|
||||
{
|
||||
NSString *outStr = [NSString stringWithCString: outBuffer
|
||||
length: outLen];
|
||||
*anObject = [NSDecimalNumber decimalNumberWithString: outStr];
|
||||
result = YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (error)
|
||||
*error = [NSError errorWithDomain: @"NSNumberFormatterParseError"
|
||||
code: err
|
||||
userInfo: nil];
|
||||
*anObject = nil;
|
||||
*rangep = NSMakeRange (rangep->location, parsePos);
|
||||
result = NO;
|
||||
}
|
||||
}
|
||||
else // If not generating NSDecimalNumber use unum_parseDouble()
|
||||
{
|
||||
double output;
|
||||
|
||||
output =
|
||||
unum_parseDouble (internal->_formatter, inBuffer, inLen, &parsePos,
|
||||
&err);
|
||||
if (U_SUCCESS(err))
|
||||
{
|
||||
*anObject = [NSNumber numberWithDouble: output];
|
||||
result = YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (error)
|
||||
*error = [NSError errorWithDomain: @"NSNumberFormatterParseError"
|
||||
code: err
|
||||
userInfo: nil];
|
||||
*anObject = nil;
|
||||
*rangep = NSMakeRange (rangep->location, parsePos);
|
||||
result = NO;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
#else
|
||||
return NO;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue