Included missing functions and changed type definition.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@6902 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2000-07-16 16:50:34 +00:00
parent c3b82eab0f
commit 3a260f14e7
2 changed files with 125 additions and 7 deletions

View file

@ -26,6 +26,12 @@
#ifndef STRICT_OPENSTEP
#ifdef HAVE_GMP
#include <gmp.h>
#endif
#include <Foundation/NSObject.h>
typedef enum {
NSRoundDown,
NSRoundUp,
@ -45,16 +51,22 @@ typedef enum {
* Give a precision of at least 38 decimal digits
* requires 128 bits.
*/
#define NSDecimalMaxSize (16/sizeof(int))
#define NSDecimalMaxSize (16/sizeof(mp_limb_t))
#define NSDecimalNoScale -1
#define NSDecimalMaxDigit 38
#define NSDecimalNoScale 128
typedef struct {
char exponent; /* Signed exponent - -128 to 127 */
char length; /* digits in mantissa. */
BOOL isNegative; /* Is this negative? */
BOOL validNumber; /* Is this a valid number? */
unsigned int mantissa[NSDecimalMaxSize];
#ifdef HAVE_GMP
mp_size_t size;
mp_limb_t lMantissa[NSDecimalMaxSize];
#else
char length; /* digits in mantissa. */
char cMantissa[NSDecimalMaxDigit];
#endif
} NSDecimal;
static inline BOOL
@ -99,6 +111,32 @@ NSDecimalMultiplyByPowerOf10(NSDecimal *result, const NSDecimal *n, short power,
GS_EXPORT NSString*
NSDecimalString(const NSDecimal *decimal, NSDictionary *locale);
// GNUstep extensions to make the implementation of NSDecimalNumber totaly
// independent for NSDecimals internal representation
// Give back the biggest NSDecimal
GS_EXPORT void
NSDecimalMax(NSDecimal *result);
// Give back the smallest NSDecimal
GS_EXPORT void
NSDecimalMin(NSDecimal *result);
// Give back the value of a NSDecimal as a double
GS_EXPORT double
NSDecimalDouble(NSDecimal *number);
// Create a NSDecimal with a mantissa, exponent and a negative flag
GS_EXPORT void
NSDecimalFromComponents(NSDecimal *result, unsigned long long mantissa,
short exponent, BOOL negative);
// Create a NSDecimal from a string using the local
GS_EXPORT void
NSDecimalFromString(NSDecimal *result, NSString *numberValue,
NSDictionary *locale);
#endif
#endif

View file

@ -29,6 +29,7 @@
#ifndef STRICT_OPENSTEP
#include <Foundation/NSDecimal.h>
#include <Foundation/NSValue.h>
@class NSDecimalNumber;
@ -41,12 +42,91 @@
- (short) scale;
@end
@interface NSDecimalNumber : NSObject <NSCopying, NSCoding>
@interface NSDecimalNumberHandler : NSObject <NSDecimalNumberBehaviors>
{
NSRoundingMode _roundingMode;
short _scale;
BOOL _raiseOnExactness;
BOOL _raiseOnOverflow;
BOOL _raiseOnUnderflow;
BOOL _raiseOnDivideByZero;
}
+ (id)defaultDecimalNumberHandler;
+ (id)decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode
scale:(short)scale
raiseOnExactness:(BOOL)raiseOnExactness
raiseOnOverflow:(BOOL)raiseOnOverflow
raiseOnUnderflow:(BOOL)raiseOnUnderflow
raiseOnDivideByZero:(BOOL)raiseOnDivideByZero;
- (id)initWithRoundingMode:(NSRoundingMode)roundingMode
scale:(short)scale
raiseOnExactness:(BOOL)raiseOnExactness
raiseOnOverflow:(BOOL)raiseOnOverflow
raiseOnUnderflow:(BOOL)raiseOnUnderflow
raiseOnDivideByZero:(BOOL)raiseOnDivideByZero;
@end
@interface NSDecimalNumber : NSNumber <NSDecimalNumberBehaviors>
{
NSDecimal data;
}
+ (id <NSDecimalNumberBehaviors>)defaultBehavior;
+ (void)setDefaultBehavior:(id <NSDecimalNumberBehaviors>)behavior;
+ (NSDecimalNumber *)maximumDecimalNumber;
+ (NSDecimalNumber *)minimumDecimalNumber;
+ (NSDecimalNumber *)notANumber;
+ (NSDecimalNumber *)one;
+ (NSDecimalNumber *)zero;
+ (NSDecimalNumber *)decimalNumberWithDecimal:(NSDecimal)decimal;
+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa
exponent:(short)exponent
isNegative:(BOOL)isNegative;
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString;
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString
locale:(NSDictionary *)locale;
- (id)initWithDecimal:(NSDecimal)decimal;
- (id)initWithMantissa:(unsigned long long)mantissa
exponent:(short)exponent
isNegative:(BOOL)flag;
- (id)initWithString:(NSString *)numberValue;
- (id)initWithString:(NSString *)numberValue
locale:(NSDictionary *)locale;
- (const char *)objCType;
- (NSDecimal)decimalValue;
- (NSString *)descriptionWithLocale:(NSDictionary *)locale;
- (double)doubleValue;
- (NSComparisonResult)compare:(NSNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber
withBehavior:(id<NSDecimalNumberBehaviors>)behavior;
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber
withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber
withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power;
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power
withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(unsigned)power;
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(unsigned)power
withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
- (NSDecimalNumber *)decimalNumberByRoundingAccordingToBehavior:(id <NSDecimalNumberBehaviors>)behavior;
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber
withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
@end
#endif
#endif