home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2 / Openstep-4.2-Intel-Developer.iso / NextLibrary / Frameworks / Foundation.framework / Versions / B / Headers / NSDecimalNumber.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-25  |  5.6 KB  |  152 lines

  1. /*    NSDecimalNumber.h
  2.     Public class for large precision base-10 arithmetic
  3.     Copyright 1995-1996, NeXT Software, Inc.  All rights reserved.
  4. */
  5.  
  6. #if !defined(STRICT_OPENSTEP)
  7.  
  8. #import <Foundation/NSValue.h>
  9. #import <Foundation/NSScanner.h>
  10. #import <Foundation/NSDecimal.h>
  11. #import <Foundation/NSDictionary.h>
  12.  
  13. /***************    Exceptions        ***********/
  14.  
  15. FOUNDATION_EXPORT NSString *NSDecimalNumberExactnessException;
  16. FOUNDATION_EXPORT NSString *NSDecimalNumberOverflowException;
  17. FOUNDATION_EXPORT NSString *NSDecimalNumberUnderflowException;
  18. FOUNDATION_EXPORT NSString *NSDecimalNumberDivideByZeroException;
  19.  
  20. /***************    Rounding and Exception behavior        ***********/
  21.  
  22. @class NSDecimalNumber;
  23.  
  24. @protocol NSDecimalNumberBehaviors
  25.  
  26. - (NSRoundingMode)roundingMode;
  27.  
  28. - (short)scale;
  29.     // The scale could return NO_SCALE for no defined scale.
  30.  
  31. - (NSDecimalNumber *)exceptionDuringOperation:(SEL)operation error:(NSCalculationError)error leftOperand:(NSDecimalNumber *)leftOperand rightOperand:(NSDecimalNumber *)rightOperand;
  32.     // Receiver can raise, return a new value, or return nil to ignore the exception.
  33.  
  34. @end
  35.  
  36. /***************    NSDecimalNumber: the class        ***********/
  37.  
  38. @interface NSDecimalNumber:NSNumber {
  39.     signed   int _exponent:8;
  40.     unsigned int _length:4;
  41.     unsigned int _isNegative:1;
  42.     unsigned int _isCompact:1;
  43.     unsigned int _reserved:1;
  44.     unsigned int _hasExternalRefCount:1;
  45.     unsigned int _refs:16;
  46.     unsigned short _mantissa[0]; // Variable length.
  47. }
  48.  
  49. - (id)initWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;
  50. - (id)initWithDecimal:(NSDecimal)decimal;
  51. - (id)initWithString:(NSString *)numberValue;
  52. - (id)initWithString:(NSString *)numberValue locale:(NSDictionary *)locale;
  53.  
  54. - (NSString *)descriptionWithLocale:(NSDictionary *)locale;
  55.  
  56. - (NSDecimal)decimalValue;
  57.  
  58. + (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;
  59. + (NSDecimalNumber *)decimalNumberWithDecimal:(NSDecimal)decimal;
  60. + (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue;
  61. + (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue locale:(NSDictionary *)locale;
  62.  
  63. + (NSDecimalNumber *)zero;
  64. + (NSDecimalNumber *)one;
  65. + (NSDecimalNumber *)minimumDecimalNumber;
  66. + (NSDecimalNumber *)maximumDecimalNumber;
  67. + (NSDecimalNumber *)notANumber;
  68.  
  69. - (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;
  70. - (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
  71.  
  72. - (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;
  73. - (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
  74.  
  75. - (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber;
  76. - (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
  77.  
  78. - (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;
  79. - (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
  80.  
  81. - (NSDecimalNumber *)decimalNumberByRaisingToPower:(unsigned)power;
  82. - (NSDecimalNumber *)decimalNumberByRaisingToPower:(unsigned)power withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
  83.  
  84. - (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power;
  85. - (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
  86.  
  87.  
  88. - (NSDecimalNumber *)decimalNumberByRoundingAccordingToBehavior:(id <NSDecimalNumberBehaviors>)behavior;
  89.     // Round to the scale of the behavior.
  90.  
  91. - (NSComparisonResult)compare:(NSNumber *)decimalNumber;
  92.     // compare two NSDecimalNumbers
  93.  
  94. + (void)setDefaultBehavior:(id <NSDecimalNumberBehaviors>)behavior;
  95.  
  96. + (id <NSDecimalNumberBehaviors>)defaultBehavior;
  97.     // One behavior per NSThread ? The default behavior is
  98.     //   rounding mode: NSRoundPlain
  99.     //   scale: No defined scale (full precision)
  100.     //   ignore exactnessException
  101.     //   raise on overflow, underflow and divide by zero.
  102.  
  103. - (const char *)objCType;
  104.     // return 'd' for double
  105.     
  106. - (double)doubleValue;
  107.     // return an approximate double value
  108.     
  109. @end
  110.  
  111. /***********    A class for defining common behaviors        *******/
  112.  
  113. @interface NSDecimalNumberHandler : NSObject <NSDecimalNumberBehaviors> {
  114.   @private
  115.     NSRoundingMode _roundingMode;
  116.     short _scale;
  117.     unsigned _raiseOnExactness:1;
  118.     unsigned _raiseOnOverflow:1;
  119.     unsigned _raiseOnUnderflow:1;
  120.     unsigned _raiseOnDivideByZero:1;
  121.     void *_reserved;
  122. }
  123.  
  124. + (id)defaultDecimalNumberHandler;
  125.     // rounding mode: NSRoundPlain
  126.     // scale: No defined scale (full precision)
  127.     // ignore exactnessException (return nil)
  128.     // raise on overflow, underflow and divide by zero.
  129.  
  130. - (id)initWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero;
  131.  
  132. + (id)decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero;
  133.  
  134. @end
  135.  
  136. /***********    Extensions to other classes        *******/
  137.  
  138. @interface NSNumber (NSDecimalNumberExtensions)
  139.  
  140. - (NSDecimal)decimalValue;
  141.     // Could be silently inexact for float and double.
  142.  
  143. @end
  144.  
  145. @interface NSScanner (NSDecimalNumberScanning)
  146.  
  147. - (BOOL)scanDecimal:(NSDecimal *)decimal;
  148.  
  149. @end
  150.  
  151. #endif /* !STRICT_OPENSTEP */
  152.