summaryrefslogtreecommitdiff
path: root/fpcsrc/packages/cocoaint/src/foundation/NSDecimalNumber.inc
blob: be354820d01cf0515d6642c6d02d45634a6ecd0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
{ Parsed from Foundation.framework NSDecimalNumber.h }

{$ifdef TYPES}
{$ifndef NSDECIMALNUMBER_PAS_T}
{$define NSDECIMALNUMBER_PAS_T}

{$endif}
{$endif}

{$ifdef RECORDS}
{$ifndef NSDECIMALNUMBER_PAS_R}
{$define NSDECIMALNUMBER_PAS_R}

{$endif}
{$endif}

{$ifdef FUNCTIONS}
{$ifndef NSDECIMALNUMBER_PAS_F}
{$define NSDECIMALNUMBER_PAS_F}

{$endif}
{$endif}

{$ifdef EXTERNAL_SYMBOLS}
{$ifndef NSDECIMALNUMBER_PAS_S}
{$define NSDECIMALNUMBER_PAS_S}

{ External string constants }
var
  NSDecimalNumberExactnessException: NSString; cvar; external;
  NSDecimalNumberOverflowException: NSString; cvar; external;
  NSDecimalNumberUnderflowException: NSString; cvar; external;
  NSDecimalNumberDivideByZeroException: NSString; cvar; external;

{$endif}
{$endif}

{$ifdef FORWARD}
  NSDecimalNumberBehaviorsProtocol = objcprotocol;
  NSDecimalNumber = objcclass;
  NSDecimalNumberPointer = ^NSDecimalNumber;
  NSDecimalNumberPtr = NSDecimalNumberPointer;
  NSDecimalNumberHandler = objcclass;
  NSDecimalNumberHandlerPointer = ^NSDecimalNumberHandler;
  NSDecimalNumberHandlerPtr = NSDecimalNumberHandlerPointer;

{$endif}

{$ifdef CLASSES}
{$ifndef NSDECIMALNUMBER_PAS_C}
{$define NSDECIMALNUMBER_PAS_C}

{ NSDecimalNumber }
  NSDecimalNumber = objcclass external (NSNumber)
  private
    _anoninternstruct_NSDecimalNumber0: record
      case byte of
       0: (_anonbitfield_NSDecimalNumber0: cint);
       1: (data: bitpacked record
        _exponent: 0..((1 shl 8)-1);
        _length: 0..((1 shl 4)-1);
        _isNegative: 0..1;
        _isCompact: 0..1;
        _reserved: 0..1;
        _hasExternalRefCount: 0..1;
        _refs: 0..((1 shl 16)-1);
       end;
      );
      end;
    _mantissa: record end; { array of 0 elements in C, does not allocate space }
    
  public
    function initWithMantissa_exponent_isNegative(mantissa: culonglong; exponent: cshort; flag: Boolean): id; message 'initWithMantissa:exponent:isNegative:';
    function initWithDecimal(dcm: NSDecimal): id; message 'initWithDecimal:';
    function initWithString(numberValue: NSString): id; message 'initWithString:';
    function initWithString_locale(numberValue: NSString; locale_: id): id; message 'initWithString:locale:';
    function descriptionWithLocale(locale_: id): NSString; message 'descriptionWithLocale:';
    function decimalValue: NSDecimal; message 'decimalValue';
    class function decimalNumberWithMantissa_exponent_isNegative(mantissa: culonglong; exponent: cshort; flag: Boolean): NSDecimalNumber; message 'decimalNumberWithMantissa:exponent:isNegative:';
    class function decimalNumberWithDecimal(dcm: NSDecimal): NSDecimalNumber; message 'decimalNumberWithDecimal:';
    class function decimalNumberWithString(numberValue: NSString): NSDecimalNumber; message 'decimalNumberWithString:';
    class function decimalNumberWithString_locale(numberValue: NSString; locale_: id): NSDecimalNumber; message 'decimalNumberWithString:locale:';
    class function zero: NSDecimalNumber; message 'zero';
    class function one: NSDecimalNumber; message 'one';
    class function minimumDecimalNumber: NSDecimalNumber; message 'minimumDecimalNumber';
    class function maximumDecimalNumber: NSDecimalNumber; message 'maximumDecimalNumber';
    class function notANumber: NSDecimalNumber; message 'notANumber';
    function decimalNumberByAdding(decimalNumber: NSDecimalNumber): NSDecimalNumber; message 'decimalNumberByAdding:';
    function decimalNumberByAdding_withBehavior(decimalNumber: NSDecimalNumber; behavior: NSDecimalNumberBehaviorsProtocol): NSDecimalNumber; message 'decimalNumberByAdding:withBehavior:';
    function decimalNumberBySubtracting(decimalNumber: NSDecimalNumber): NSDecimalNumber; message 'decimalNumberBySubtracting:';
    function decimalNumberBySubtracting_withBehavior(decimalNumber: NSDecimalNumber; behavior: NSDecimalNumberBehaviorsProtocol): NSDecimalNumber; message 'decimalNumberBySubtracting:withBehavior:';
    function decimalNumberByMultiplyingBy(decimalNumber: NSDecimalNumber): NSDecimalNumber; message 'decimalNumberByMultiplyingBy:';
    function decimalNumberByMultiplyingBy_withBehavior(decimalNumber: NSDecimalNumber; behavior: NSDecimalNumberBehaviorsProtocol): NSDecimalNumber; message 'decimalNumberByMultiplyingBy:withBehavior:';
    function decimalNumberByDividingBy(decimalNumber: NSDecimalNumber): NSDecimalNumber; message 'decimalNumberByDividingBy:';
    function decimalNumberByDividingBy_withBehavior(decimalNumber: NSDecimalNumber; behavior: NSDecimalNumberBehaviorsProtocol): NSDecimalNumber; message 'decimalNumberByDividingBy:withBehavior:';
    function decimalNumberByRaisingToPower(power: NSUInteger): NSDecimalNumber; message 'decimalNumberByRaisingToPower:';
    function decimalNumberByRaisingToPower_withBehavior(power: NSUInteger; behavior: NSDecimalNumberBehaviorsProtocol): NSDecimalNumber; message 'decimalNumberByRaisingToPower:withBehavior:';
    function decimalNumberByMultiplyingByPowerOf10(power: cshort): NSDecimalNumber; message 'decimalNumberByMultiplyingByPowerOf10:';
    function decimalNumberByMultiplyingByPowerOf10_withBehavior(power: cshort; behavior: NSDecimalNumberBehaviorsProtocol): NSDecimalNumber; message 'decimalNumberByMultiplyingByPowerOf10:withBehavior:';
    function decimalNumberByRoundingAccordingToBehavior(behavior: NSDecimalNumberBehaviorsProtocol): NSDecimalNumber; message 'decimalNumberByRoundingAccordingToBehavior:';
    function compare(decimalNumber: NSNumber): NSComparisonResult; message 'compare:';
    class procedure setDefaultBehavior(behavior: NSDecimalNumberBehaviorsProtocol); message 'setDefaultBehavior:';
    class function defaultBehavior: NSDecimalNumberBehaviorsProtocol; message 'defaultBehavior';
    function objCType: PChar; message 'objCType';
    function doubleValue: double; message 'doubleValue';
  end;

{ NSDecimalNumberHandler }
  NSDecimalNumberHandler = objcclass external (NSObject, NSDecimalNumberBehaviorsProtocol, NSCodingProtocol)
  private
    _anoninternstruct_NSDecimalNumber1: record
      case byte of
       0: (_anonbitfield_NSDecimalNumber1: cint);
       1: (data: bitpacked record
        _scale: 0..((1 shl 16)-1);
        _roundingMode: 0..((1 shl 3)-1);
        _raiseOnExactness: 0..1;
        _raiseOnOverflow: 0..1;
        _raiseOnUnderflow: 0..1;
        _raiseOnDivideByZero: 0..1;
        _unused: 0..((1 shl 9)-1);
       end;
      );
      end;
    _reserved2: Pointer;
    _reserved: Pointer;
    
  public
    class function defaultDecimalNumberHandler: id; message 'defaultDecimalNumberHandler';
    function initWithRoundingMode_scale_raiseOnExactness_raiseOnOverflow_raiseOnUnderflow_raiseOnDivideByZero(roundingMode: NSRoundingMode; scale: cshort; exact: Boolean; overflow: Boolean; underflow: Boolean; divideByZero: Boolean): id; message 'initWithRoundingMode:scale:raiseOnExactness:raiseOnOverflow:raiseOnUnderflow:raiseOnDivideByZero:';
    class function decimalNumberHandlerWithRoundingMode_scale_raiseOnExactness_raiseOnOverflow_raiseOnUnderflow_raiseOnDivideByZero(roundingMode: NSRoundingMode; scale: cshort; exact: Boolean; overflow: Boolean; underflow: Boolean; divideByZero: Boolean): id; message 'decimalNumberHandlerWithRoundingMode:scale:raiseOnExactness:raiseOnOverflow:raiseOnUnderflow:raiseOnDivideByZero:';

    { Adopted Protocols }
    function roundingMode: NSRoundingMode;
    function scale: cshort;
    function exceptionDuringOperation_error_leftOperand_rightOperand(operation: SEL; error: NSCalculationError; leftOperand: NSDecimalNumber; rightOperand: NSDecimalNumber): NSDecimalNumber;
    procedure encodeWithCoder(aCoder: NSCoder);
    function initWithCoder(aDecoder: NSCoder): id;
  end;

{ NSDecimalNumberExtensionsCategory }
  NSDecimalNumberExtensionsCategory = objccategory external (NSNumber)
    function decimalValue: NSDecimal; message 'decimalValue';
  end;

{ NSDecimalNumberScanningCategory }
  NSDecimalNumberScanningCategory = objccategory external (NSScanner)
    function scanDecimal(dcm: NSDecimalPtr): Boolean; message 'scanDecimal:';
  end;

{$endif}
{$endif}
{$ifdef PROTOCOLS}
{$ifndef NSDECIMALNUMBER_PAS_P}
{$define NSDECIMALNUMBER_PAS_P}
  
{ NSDecimalNumberBehaviors Protocol }
  NSDecimalNumberBehaviorsProtocol = objcprotocol external name 'NSDecimalNumberBehaviors'
    function roundingMode: NSRoundingMode; message 'roundingMode';
    function scale: cshort; message 'scale';
    function exceptionDuringOperation_error_leftOperand_rightOperand(operation: SEL; error: NSCalculationError; leftOperand: NSDecimalNumber; rightOperand: NSDecimalNumber): NSDecimalNumber; message 'exceptionDuringOperation:error:leftOperand:rightOperand:';
  end;
{$endif}
{$endif}