mirror of
https://github.com/gnustep/libs-base.git
synced 2025-06-01 09:02:01 +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
5d9d9009e7
commit
c1a5f976ae
2 changed files with 125 additions and 7 deletions
|
@ -26,6 +26,12 @@
|
||||||
|
|
||||||
#ifndef STRICT_OPENSTEP
|
#ifndef STRICT_OPENSTEP
|
||||||
|
|
||||||
|
#ifdef HAVE_GMP
|
||||||
|
#include <gmp.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <Foundation/NSObject.h>
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NSRoundDown,
|
NSRoundDown,
|
||||||
NSRoundUp,
|
NSRoundUp,
|
||||||
|
@ -45,16 +51,22 @@ typedef enum {
|
||||||
* Give a precision of at least 38 decimal digits
|
* Give a precision of at least 38 decimal digits
|
||||||
* requires 128 bits.
|
* 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 {
|
typedef struct {
|
||||||
char exponent; /* Signed exponent - -128 to 127 */
|
char exponent; /* Signed exponent - -128 to 127 */
|
||||||
char length; /* digits in mantissa. */
|
|
||||||
BOOL isNegative; /* Is this negative? */
|
BOOL isNegative; /* Is this negative? */
|
||||||
BOOL validNumber; /* Is this a valid number? */
|
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;
|
} NSDecimal;
|
||||||
|
|
||||||
static inline BOOL
|
static inline BOOL
|
||||||
|
@ -99,6 +111,32 @@ NSDecimalMultiplyByPowerOf10(NSDecimal *result, const NSDecimal *n, short power,
|
||||||
GS_EXPORT NSString*
|
GS_EXPORT NSString*
|
||||||
NSDecimalString(const NSDecimal *decimal, NSDictionary *locale);
|
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
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#ifndef STRICT_OPENSTEP
|
#ifndef STRICT_OPENSTEP
|
||||||
|
|
||||||
#include <Foundation/NSDecimal.h>
|
#include <Foundation/NSDecimal.h>
|
||||||
|
#include <Foundation/NSValue.h>
|
||||||
|
|
||||||
@class NSDecimalNumber;
|
@class NSDecimalNumber;
|
||||||
|
|
||||||
|
@ -41,12 +42,91 @@
|
||||||
- (short) scale;
|
- (short) scale;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface NSDecimalNumberHandler : NSObject <NSDecimalNumberBehaviors>
|
||||||
@interface NSDecimalNumber : NSObject <NSCopying, NSCoding>
|
|
||||||
{
|
{
|
||||||
|
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
|
@end
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue