mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
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:
parent
c3b82eab0f
commit
3a260f14e7
2 changed files with 125 additions and 7 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue