~ubuntu-branches/ubuntu/maverick/kdeutils/maverick-proposed

« back to all changes in this revision

Viewing changes to kcalc/knumber/knumber_priv.h

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2010-05-28 09:49:30 UTC
  • mfrom: (1.2.44 upstream)
  • Revision ID: james.westby@ubuntu.com-20100528094930-jzynf0obv1n2v13a
Tags: 4:4.4.80-0ubuntu1~ppa1
New upstream beta release

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
 
38
38
class _knumber
39
39
{
40
 
 public:
41
 
  enum NumType {SpecialType, IntegerType, FractionType, FloatType};
42
 
  enum ErrorType {UndefinedNumber, Infinity, MinusInfinity};
43
 
 
44
 
  _knumber() {}
45
 
 
46
 
  virtual ~_knumber() {}
47
 
 
48
 
  virtual void copy(_knumber const & num) = 0;
49
 
 
50
 
  virtual NumType type(void) const = 0;
51
 
 
52
 
  virtual QString const ascii(int prec = -1) const = 0;
53
 
 
54
 
  virtual _knumber * abs(void) const = 0;
55
 
  virtual _knumber * intPart(void) const = 0;
56
 
  virtual int sign(void) const = 0;
57
 
  virtual _knumber * sqrt(void) const = 0;
58
 
  virtual _knumber * cbrt(void) const = 0;
59
 
  virtual _knumber * factorial(void) const = 0;
60
 
  virtual _knumber * change_sign(void) const = 0;
61
 
  virtual _knumber * reciprocal(void) const = 0;
62
 
  virtual _knumber * add(_knumber const & arg2) const = 0;
63
 
  virtual _knumber * multiply(_knumber const & arg2) const = 0;
64
 
  _knumber * divide(_knumber const & arg2) const;
65
 
 
66
 
  virtual _knumber * power(_knumber const & exponent) const = 0;
67
 
 
68
 
  virtual int compare(_knumber const &arg2) const = 0;
69
 
 
70
 
  virtual operator long int(void) const = 0;
71
 
  virtual operator unsigned long int(void) const = 0;
72
 
  virtual operator long long int(void) const = 0;
73
 
  virtual operator unsigned long long int(void) const = 0;
74
 
  virtual operator double (void) const = 0;
 
40
public:
 
41
    enum NumType {SpecialType, IntegerType, FractionType, FloatType};
 
42
    enum ErrorType {UndefinedNumber, Infinity, MinusInfinity};
 
43
 
 
44
    _knumber() {}
 
45
 
 
46
    virtual ~_knumber() {}
 
47
 
 
48
    virtual void copy(_knumber const & num) = 0;
 
49
 
 
50
    virtual NumType type(void) const = 0;
 
51
 
 
52
    virtual QString const ascii(int prec = -1) const = 0;
 
53
 
 
54
    virtual _knumber * abs(void) const = 0;
 
55
    virtual _knumber * intPart(void) const = 0;
 
56
    virtual int sign(void) const = 0;
 
57
    virtual _knumber * sqrt(void) const = 0;
 
58
    virtual _knumber * cbrt(void) const = 0;
 
59
    virtual _knumber * factorial(void) const = 0;
 
60
    virtual _knumber * change_sign(void) const = 0;
 
61
    virtual _knumber * reciprocal(void) const = 0;
 
62
    virtual _knumber * add(_knumber const & arg2) const = 0;
 
63
    virtual _knumber * multiply(_knumber const & arg2) const = 0;
 
64
    _knumber * divide(_knumber const & arg2) const;
 
65
 
 
66
    virtual _knumber * power(_knumber const & exponent) const = 0;
 
67
 
 
68
    virtual int compare(_knumber const &arg2) const = 0;
 
69
 
 
70
    virtual operator long int(void) const = 0;
 
71
    virtual operator unsigned long int(void) const = 0;
 
72
    virtual operator long long int(void) const = 0;
 
73
    virtual operator unsigned long long int(void) const = 0;
 
74
    virtual operator double(void) const = 0;
75
75
};
76
76
 
77
77
 
78
78
class _knumerror : public _knumber
79
79
{
80
 
 public:
81
 
  _knumerror(ErrorType error = UndefinedNumber)
82
 
    : _error(error) { }
83
 
  
84
 
  _knumerror(_knumber const & num);
85
 
 
86
 
  _knumerror(const QString & num);
87
 
 
88
 
  //virtual ~_knumerror() { }
89
 
 
90
 
  _knumerror const & operator = (_knumerror const & num);
91
 
 
92
 
  virtual void copy(_knumber const & num)
93
 
  {
94
 
    _error = dynamic_cast<_knumerror const &>(num)._error;
95
 
  }
96
 
 
97
 
  virtual NumType type(void) const {return SpecialType;}
98
 
 
99
 
  virtual QString const ascii(int prec = -1) const;
100
 
 
101
 
  virtual _knumber * abs(void) const;
102
 
  virtual _knumber * intPart(void) const;
103
 
  virtual int sign(void) const;
104
 
  virtual _knumber * cbrt(void) const;
105
 
  virtual _knumber * sqrt(void) const;
106
 
  virtual _knumber * factorial(void) const;
107
 
  virtual _knumber * change_sign(void) const;
108
 
  virtual _knumber * reciprocal(void) const;
109
 
  virtual _knumber * add(_knumber const & arg2) const;
110
 
  virtual _knumber * multiply(_knumber const & arg2) const;
111
 
 
112
 
  virtual _knumber * power(_knumber const & exponent) const;
113
 
 
114
 
  virtual int compare(_knumber const &arg2) const;
115
 
 
116
 
  virtual operator long int(void) const;
117
 
  virtual operator unsigned long int(void) const;
118
 
  virtual operator long long int(void) const;
119
 
  virtual operator unsigned long long int(void) const;
120
 
  virtual operator double (void) const;
121
 
 
122
 
 private:
123
 
 
124
 
  ErrorType _error;
125
 
 
126
 
  friend class _knuminteger;
127
 
  friend class _knumfraction;
128
 
  friend class _knumfloat;
 
80
public:
 
81
    _knumerror(ErrorType error = UndefinedNumber)
 
82
            : _error(error) { }
 
83
 
 
84
    _knumerror(_knumber const & num);
 
85
 
 
86
    _knumerror(const QString & num);
 
87
 
 
88
    //virtual ~_knumerror() { }
 
89
 
 
90
    _knumerror const & operator = (_knumerror const & num);
 
91
 
 
92
    virtual void copy(_knumber const & num) {
 
93
        _error = dynamic_cast<_knumerror const &>(num)._error;
 
94
    }
 
95
 
 
96
    virtual NumType type(void) const {
 
97
        return SpecialType;
 
98
    }
 
99
 
 
100
    virtual QString const ascii(int prec = -1) const;
 
101
 
 
102
    virtual _knumber * abs(void) const;
 
103
    virtual _knumber * intPart(void) const;
 
104
    virtual int sign(void) const;
 
105
    virtual _knumber * cbrt(void) const;
 
106
    virtual _knumber * sqrt(void) const;
 
107
    virtual _knumber * factorial(void) const;
 
108
    virtual _knumber * change_sign(void) const;
 
109
    virtual _knumber * reciprocal(void) const;
 
110
    virtual _knumber * add(_knumber const & arg2) const;
 
111
    virtual _knumber * multiply(_knumber const & arg2) const;
 
112
 
 
113
    virtual _knumber * power(_knumber const & exponent) const;
 
114
 
 
115
    virtual int compare(_knumber const &arg2) const;
 
116
 
 
117
    virtual operator long int(void) const;
 
118
    virtual operator unsigned long int(void) const;
 
119
    virtual operator long long int(void) const;
 
120
    virtual operator unsigned long long int(void) const;
 
121
    virtual operator double(void) const;
 
122
 
 
123
private:
 
124
 
 
125
    ErrorType _error;
 
126
 
 
127
    friend class _knuminteger;
 
128
    friend class _knumfraction;
 
129
    friend class _knumfloat;
129
130
};
130
131
 
131
132
 
132
133
 
133
134
class _knuminteger : public _knumber
134
135
{
135
 
 public:
136
 
  _knuminteger(qint32 num = 0)
137
 
  {
138
 
    mpz_init_set_si(_mpz, static_cast<signed long int>(num));
139
 
  }
140
 
 
141
 
  _knuminteger(quint32 num)
142
 
  {
143
 
    mpz_init_set_ui(_mpz, static_cast<unsigned long int>(num));
144
 
  }
145
 
  
146
 
  _knuminteger(qint64 num);
147
 
 
148
 
  _knuminteger(quint64 num);
149
 
 
150
 
  _knuminteger(_knumber const & num);
151
 
 
152
 
  _knuminteger(const QString & num);
153
 
 
154
 
  virtual ~_knuminteger()
155
 
  {
156
 
    mpz_clear(_mpz);
157
 
  }
158
 
 
159
 
  _knuminteger const & operator = (_knuminteger const & num);
160
 
 
161
 
  virtual void copy(_knumber const & num)
162
 
  {
163
 
    mpz_set(_mpz, dynamic_cast<_knuminteger const &>(num)._mpz);
164
 
  }
165
 
 
166
 
  virtual NumType type(void) const {return IntegerType;}
167
 
 
168
 
  virtual QString const ascii(int prec = -1) const;
169
 
 
170
 
  virtual _knumber * abs(void) const;
171
 
  virtual _knumber * intPart(void) const;
172
 
  virtual int sign(void) const;
173
 
  virtual _knumber * cbrt(void) const;
174
 
  virtual _knumber * sqrt(void) const;
175
 
  virtual _knumber * factorial(void) const;
176
 
  virtual _knumber * change_sign(void) const;
177
 
  virtual _knumber * reciprocal(void) const;
178
 
  virtual _knumber * add(_knumber const & arg2) const;
179
 
  virtual _knumber * multiply(_knumber const & arg2) const;
180
 
 
181
 
  virtual int compare(_knumber const &arg2) const;
182
 
 
183
 
  virtual _knumber * power(_knumber const & exponent) const;
184
 
 
185
 
  virtual operator long int (void) const;
186
 
  virtual operator unsigned long int (void) const;
187
 
  virtual operator long long int(void) const;
188
 
  virtual operator unsigned long long int(void) const;
189
 
  virtual operator double (void) const;
190
 
 
191
 
  _knuminteger * intAnd(_knuminteger const &arg2) const;
192
 
  _knuminteger * intOr(_knuminteger const &arg2) const;
193
 
  _knumber * mod(_knuminteger const &arg2) const;
194
 
  _knumber * shift(_knuminteger const &arg2) const;
195
 
  
196
 
 private:
197
 
  mpz_t _mpz;
198
 
 
199
 
  friend class _knumfraction;
200
 
  friend class _knumfloat;
 
136
public:
 
137
    _knuminteger(qint32 num = 0) {
 
138
        mpz_init_set_si(_mpz, static_cast<signed long int>(num));
 
139
    }
 
140
 
 
141
    _knuminteger(quint32 num) {
 
142
        mpz_init_set_ui(_mpz, static_cast<unsigned long int>(num));
 
143
    }
 
144
 
 
145
    _knuminteger(qint64 num);
 
146
 
 
147
    _knuminteger(quint64 num);
 
148
 
 
149
    _knuminteger(_knumber const & num);
 
150
 
 
151
    _knuminteger(const QString & num);
 
152
 
 
153
    virtual ~_knuminteger() {
 
154
        mpz_clear(_mpz);
 
155
    }
 
156
 
 
157
    _knuminteger const & operator = (_knuminteger const & num);
 
158
 
 
159
    virtual void copy(_knumber const & num) {
 
160
        mpz_set(_mpz, dynamic_cast<_knuminteger const &>(num)._mpz);
 
161
    }
 
162
 
 
163
    virtual NumType type(void) const {
 
164
        return IntegerType;
 
165
    }
 
166
 
 
167
    virtual QString const ascii(int prec = -1) const;
 
168
 
 
169
    virtual _knumber * abs(void) const;
 
170
    virtual _knumber * intPart(void) const;
 
171
    virtual int sign(void) const;
 
172
    virtual _knumber * cbrt(void) const;
 
173
    virtual _knumber * sqrt(void) const;
 
174
    virtual _knumber * factorial(void) const;
 
175
    virtual _knumber * change_sign(void) const;
 
176
    virtual _knumber * reciprocal(void) const;
 
177
    virtual _knumber * add(_knumber const & arg2) const;
 
178
    virtual _knumber * multiply(_knumber const & arg2) const;
 
179
 
 
180
    virtual int compare(_knumber const &arg2) const;
 
181
 
 
182
    virtual _knumber * power(_knumber const & exponent) const;
 
183
 
 
184
    virtual operator long int (void) const;
 
185
    virtual operator unsigned long int (void) const;
 
186
    virtual operator long long int(void) const;
 
187
    virtual operator unsigned long long int(void) const;
 
188
    virtual operator double(void) const;
 
189
 
 
190
    _knuminteger * intAnd(_knuminteger const &arg2) const;
 
191
    _knuminteger * intOr(_knuminteger const &arg2) const;
 
192
    _knumber * mod(_knuminteger const &arg2) const;
 
193
    _knumber * shift(_knuminteger const &arg2) const;
 
194
 
 
195
private:
 
196
    mpz_t _mpz;
 
197
 
 
198
    friend class _knumfraction;
 
199
    friend class _knumfloat;
201
200
};
202
201
 
203
202
 
204
203
 
205
204
class _knumfraction : public _knumber
206
205
{
207
 
 public:
208
 
  
209
 
  explicit _knumfraction(signed long int nom = 0, signed long int denom = 1)
210
 
  {
211
 
    mpq_init(_mpq);
212
 
    mpq_set_si(_mpq, nom, denom);
213
 
    mpq_canonicalize(_mpq);
214
 
  }
215
 
 
216
 
  _knumfraction(_knumber const & num);
217
 
  
218
 
  _knumfraction(QString const & num);
219
 
 
220
 
  virtual ~_knumfraction()
221
 
  {
222
 
    mpq_clear(_mpq);
223
 
  }
224
 
  
225
 
  virtual void copy(_knumber const & num)
226
 
  {
227
 
    mpq_set(_mpq, dynamic_cast<_knumfraction const &>(num)._mpq);
228
 
  }
229
 
 
230
 
  virtual NumType type(void) const {return FractionType;}
231
 
 
232
 
  virtual QString const ascii(int prec = -1) const;
233
 
  
234
 
  bool isInteger(void) const;
235
 
 
236
 
  virtual _knumber * abs(void) const;
237
 
  virtual _knumber * intPart(void) const;
238
 
  virtual int sign(void) const;
239
 
  virtual _knumber * cbrt(void) const;
240
 
  virtual _knumber * sqrt(void) const;
241
 
  virtual _knumber * factorial(void) const;
242
 
  virtual _knumber * change_sign(void) const;
243
 
  virtual _knumber * reciprocal(void) const;
244
 
  virtual _knumber * add(_knumber const & arg2) const;
245
 
  virtual _knumber * multiply(_knumber const & arg2) const;
246
 
 
247
 
  virtual _knumber * power(_knumber const & exponent) const;
248
 
  
249
 
  virtual int compare(_knumber const &arg2) const;
250
 
 
251
 
  virtual operator long int (void) const;
252
 
  virtual operator unsigned long int (void) const;
253
 
  virtual operator long long int(void) const;
254
 
  virtual operator unsigned long long int(void) const;
255
 
  virtual operator double (void) const;
256
 
 
257
 
 private:
258
 
  mpq_t _mpq;
259
 
 
260
 
  friend class _knuminteger;
261
 
  friend class _knumfloat;
 
206
public:
 
207
 
 
208
    explicit _knumfraction(signed long int nom = 0, signed long int denom = 1) {
 
209
        mpq_init(_mpq);
 
210
        mpq_set_si(_mpq, nom, denom);
 
211
        mpq_canonicalize(_mpq);
 
212
    }
 
213
 
 
214
    _knumfraction(_knumber const & num);
 
215
 
 
216
    _knumfraction(QString const & num);
 
217
 
 
218
    virtual ~_knumfraction() {
 
219
        mpq_clear(_mpq);
 
220
    }
 
221
 
 
222
    virtual void copy(_knumber const & num) {
 
223
        mpq_set(_mpq, dynamic_cast<_knumfraction const &>(num)._mpq);
 
224
    }
 
225
 
 
226
    virtual NumType type(void) const {
 
227
        return FractionType;
 
228
    }
 
229
 
 
230
    virtual QString const ascii(int prec = -1) const;
 
231
 
 
232
    bool isInteger(void) const;
 
233
 
 
234
    virtual _knumber * abs(void) const;
 
235
    virtual _knumber * intPart(void) const;
 
236
    virtual int sign(void) const;
 
237
    virtual _knumber * cbrt(void) const;
 
238
    virtual _knumber * sqrt(void) const;
 
239
    virtual _knumber * factorial(void) const;
 
240
    virtual _knumber * change_sign(void) const;
 
241
    virtual _knumber * reciprocal(void) const;
 
242
    virtual _knumber * add(_knumber const & arg2) const;
 
243
    virtual _knumber * multiply(_knumber const & arg2) const;
 
244
 
 
245
    virtual _knumber * power(_knumber const & exponent) const;
 
246
 
 
247
    virtual int compare(_knumber const &arg2) const;
 
248
 
 
249
    virtual operator long int (void) const;
 
250
    virtual operator unsigned long int (void) const;
 
251
    virtual operator long long int(void) const;
 
252
    virtual operator unsigned long long int(void) const;
 
253
    virtual operator double(void) const;
 
254
 
 
255
private:
 
256
    mpq_t _mpq;
 
257
 
 
258
    friend class _knuminteger;
 
259
    friend class _knumfloat;
262
260
};
263
261
 
264
262
class _knumfloat : public _knumber
265
263
{
266
 
 public:
267
 
  _knumfloat(double num = 1.0)
268
 
  {
269
 
    mpf_init(_mpf);
270
 
    mpf_set_d(_mpf, num);
271
 
  }
272
 
  
273
 
  _knumfloat(_knumber const & num);
274
 
 
275
 
  _knumfloat(QString const & num);
276
 
  
277
 
  virtual ~_knumfloat()
278
 
  {
279
 
    mpf_clear(_mpf);
280
 
  }
281
 
 
282
 
  virtual void copy(_knumber const & num)
283
 
  {
284
 
    mpf_set(_mpf, dynamic_cast<_knumfloat const &>(num)._mpf);
285
 
  }
286
 
 
287
 
  virtual NumType type(void) const {return FloatType;}
288
 
 
289
 
  virtual QString const ascii(int prec = -1) const;
290
 
 
291
 
  virtual _knumber * abs(void) const;
292
 
  virtual _knumber * intPart(void) const;
293
 
  virtual int sign(void) const;
294
 
  virtual _knumber * cbrt(void) const;
295
 
  virtual _knumber * sqrt(void) const;
296
 
  virtual _knumber * factorial(void) const;
297
 
  virtual _knumber * change_sign(void) const;
298
 
  virtual _knumber * reciprocal(void) const;
299
 
  virtual _knumber * add(_knumber const & arg2) const;
300
 
  virtual _knumber * multiply(_knumber const & arg2) const;
301
 
  virtual _knumber * divide(_knumber const & arg2) const;
302
 
 
303
 
  virtual _knumber * power(_knumber const & exponent) const;
304
 
 
305
 
  virtual int compare(_knumber const &arg2) const;
306
 
 
307
 
  virtual operator long int (void) const;
308
 
  virtual operator unsigned long int (void) const;
309
 
  virtual operator long long int(void) const;
310
 
  virtual operator unsigned long long int(void) const;
311
 
  virtual operator double (void) const;
312
 
 
313
 
 private:
 
264
public:
 
265
    _knumfloat(double num = 1.0) {
 
266
        mpf_init(_mpf);
 
267
        mpf_set_d(_mpf, num);
 
268
    }
 
269
 
 
270
    _knumfloat(_knumber const & num);
 
271
 
 
272
    _knumfloat(QString const & num);
 
273
 
 
274
    virtual ~_knumfloat() {
 
275
        mpf_clear(_mpf);
 
276
    }
 
277
 
 
278
    virtual void copy(_knumber const & num) {
 
279
        mpf_set(_mpf, dynamic_cast<_knumfloat const &>(num)._mpf);
 
280
    }
 
281
 
 
282
    virtual NumType type(void) const {
 
283
        return FloatType;
 
284
    }
 
285
 
 
286
    virtual QString const ascii(int prec = -1) const;
 
287
 
 
288
    virtual _knumber * abs(void) const;
 
289
    virtual _knumber * intPart(void) const;
 
290
    virtual int sign(void) const;
 
291
    virtual _knumber * cbrt(void) const;
 
292
    virtual _knumber * sqrt(void) const;
 
293
    virtual _knumber * factorial(void) const;
 
294
    virtual _knumber * change_sign(void) const;
 
295
    virtual _knumber * reciprocal(void) const;
 
296
    virtual _knumber * add(_knumber const & arg2) const;
 
297
    virtual _knumber * multiply(_knumber const & arg2) const;
 
298
    virtual _knumber * divide(_knumber const & arg2) const;
 
299
 
 
300
    virtual _knumber * power(_knumber const & exponent) const;
 
301
 
 
302
    virtual int compare(_knumber const &arg2) const;
 
303
 
 
304
    virtual operator long int (void) const;
 
305
    virtual operator unsigned long int (void) const;
 
306
    virtual operator long long int(void) const;
 
307
    virtual operator unsigned long long int(void) const;
 
308
    virtual operator double(void) const;
 
309
 
 
310
private:
314
311
    mpf_t _mpf;
315
312
 
316
 
  friend class _knuminteger;
317
 
  friend class _knumfraction;
 
313
    friend class _knuminteger;
 
314
    friend class _knumfraction;
318
315
};
319
316
 
320
317