kspread

valuecalc.h
1/* This file is part of the KDE project
2 Copyright (C) 2005 Tomas Mecir <mecirt@gmail.com>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18*/
19
20#ifndef KSPREAD_VALUECALC
21#define KSPREAD_VALUECALC
22
23#include <map>
24
25#include <tqvaluelist.h>
26#include <tqvaluevector.h>
27
28#include "kspread_value.h"
29
30namespace KSpread
31{
32class Doc;
33class ValueCalc;
34class ValueConverter;
35
36// Condition structures
37enum Comp { isEqual, isLess, isGreater, lessEqual, greaterEqual, notEqual };
38enum Type { numeric, string };
39
40struct Condition
41{
42 Comp comp;
43 int index;
44 double value;
45 TQString stringValue;
46 Type type;
47};
48
49typedef TQValueList<Condition> ConditionList;
50
51typedef void (*arrayWalkFunc) (ValueCalc *, Value &result,
52 Value val, Value param);
53
69class ValueCalc {
70 public:
72
73 ValueConverter *conv () { return converter; };
74
75 // some functions need access to the document
76 void setDoc (Doc *d) { _doc = d; };
77 Doc *doc () { return _doc; };
78
80 Value add (const Value &a, const Value &b);
81 Value sub (const Value &a, const Value &b);
82 Value mul (const Value &a, const Value &b);
83 Value div (const Value &a, const Value &b);
84 Value mod (const Value &a, const Value &b);
85 Value pow (const Value &a, const Value &b);
86 Value sqr (const Value &a);
87 Value sqrt (const Value &a);
88 Value add (const Value &a, double b);
89 Value sub (const Value &a, double b);
90 Value mul (const Value &a, double b);
91 Value div (const Value &a, double b);
92 Value pow (const Value &a, double b);
93 Value abs (const Value &a);
94
96 bool isZero (const Value &a);
97 bool isEven (const Value &a);
99 bool equal (const Value &a, const Value &b);
101 bool approxEqual (const Value &a, const Value &b);
103 bool greater (const Value &a, const Value &b);
105 bool gequal (const Value &a, const Value &b);
107 bool lower (const Value &a, const Value &b);
109 bool strEqual (const Value &a, const Value &b, bool CS = true);
111 bool strGreater (const Value &a, const Value &b, bool CS = true);
113 bool strGequal (const Value &a, const Value &b, bool CS = true);
115 bool strLower (const Value &a, const Value &b, bool CS = true);
117 bool naturalEqual (const Value &a, const Value &b, bool CS = true);
119 bool naturalGreater (const Value &a, const Value &b, bool CS = true);
121 bool naturalGequal (const Value &a, const Value &b, bool CS = true);
123 bool naturalLower (const Value &a, const Value &b, bool CS = true);
124
125 int sign (const Value &a);
126
128 Value roundDown (const Value &a, const Value &digits);
129 Value roundUp (const Value &a, const Value &digits);
130 Value round (const Value &a, const Value &digits);
131 Value roundDown (const Value &a, int digits = 0);
132 Value roundUp (const Value &a, int digits = 0);
133 Value round (const Value &a, int digits = 0);
134
136 Value log (const Value &number, const Value &base);
137 Value log (const Value &number, double base = 10);
138 Value ln (const Value &number);
139 Value exp (const Value &number);
140
142 Value pi ();
143 Value eps ();
144
146 Value random (double range = 1.0);
147 Value random (Value range);
148
150 Value fact (const Value &which);
151 Value fact (const Value &which, const Value &end);
152 Value fact (int which, int end = 0);
154 Value factDouble (int which);
155 Value factDouble (Value which);
156
158 Value combin (int n, int k);
159 Value combin (Value n, Value k);
160
162 Value gcd (const Value &a, const Value &b);
164 Value lcm (const Value &a, const Value &b);
165
167 Value base (const Value &val, int base = 16, int prec = 0);
169 Value fromBase (const Value &val, int base = 16);
170
172 Value sin (const Value &number);
173 Value cos (const Value &number);
174 Value tg (const Value &number);
175 Value cotg (const Value &number);
176 Value asin (const Value &number);
177 Value acos (const Value &number);
178 Value atg (const Value &number);
179 Value atan2 (const Value &y, const Value &x);
180
182 Value sinh (const Value &number);
183 Value cosh (const Value &number);
184 Value tgh (const Value &number);
185 Value asinh (const Value &number);
186 Value acosh (const Value &number);
187 Value atgh (const Value &number);
188
192 Value phi (Value x);
193 Value gauss (Value xx);
194 Value gaussinv (Value xx);
195 Value GetGamma (Value _x);
196 Value GetLogGamma (Value _x);
197 Value GetGammaDist (Value _x, Value _alpha,
198 Value _beta);
199 Value GetBeta (Value _x, Value _alpha,
200 Value _beta);
201
203 Value besseli (Value v, Value x);
204 Value besselj (Value v, Value x);
205 Value besselk (Value v, Value x);
206 Value besseln (Value v, Value x);
207
209 Value erf (Value x);
210 Value erfc (Value x);
211
213 void arrayWalk (const Value &range, Value &res,
214 arrayWalkFunc func, Value param);
217 void arrayWalk (TQValueVector<Value> &range, Value &res,
218 arrayWalkFunc func, Value param);
219 void twoArrayWalk (const Value &a1, const Value &a2,
220 Value &res, arrayWalkFunc func);
221 void twoArrayWalk (TQValueVector<Value> &a1,
222 TQValueVector<Value> &a2, Value &res, arrayWalkFunc func);
223 arrayWalkFunc awFunc (const TQString &name);
224 void registerAwFunc (const TQString &name, arrayWalkFunc func);
225
227 // if full is true, A-version is used (means string/bool values included)
228 Value sum (const Value &range, bool full = true);
229 Value sumsq (const Value &range, bool full = true);
230 Value sumIf (const Value &range,
231 const Value &checkRange, const Condition &cond);
232 int count (const Value &range, bool full = true);
233 int countIf (const Value &range, const Condition &cond);
234 Value avg (const Value &range, bool full = true);
235 Value max (const Value &range, bool full = true);
236 Value min (const Value &range, bool full = true);
237 Value product (const Value &range, Value init,
238 bool full = true);
239 Value stddev (const Value &range, bool full = true);
240 Value stddev (const Value &range, Value avg,
241 bool full = true);
242 Value stddevP (const Value &range, bool full = true);
243 Value stddevP (const Value &range, Value avg,
244 bool full = true);
245
247 Value sum (TQValueVector<Value> range, bool full = true);
248 int count (TQValueVector<Value> range, bool full = true);
249 Value avg (TQValueVector<Value> range, bool full = true);
250 Value max (TQValueVector<Value> range, bool full = true);
251 Value min (TQValueVector<Value> range, bool full = true);
252 Value product (TQValueVector<Value> range, Value init,
253 bool full = true);
254 Value stddev (TQValueVector<Value> range, bool full = true);
255 Value stddev (TQValueVector<Value> range, Value avg,
256 bool full = true);
257 Value stddevP (TQValueVector<Value> range, bool full = true);
258 Value stddevP (TQValueVector<Value> range, Value avg,
259 bool full = true);
260
265 void getCond (Condition &cond, Value val);
266
271 bool matches (const Condition &cond, Value d);
272
273 protected:
274 ValueConverter* converter;
276 Value::Format format (Value::Format a, Value::Format b);
277
278 Doc *_doc;
279
281 std::map<TQString, arrayWalkFunc> awFuncs;
282};
283
284} //namespace KSpread
285
286
287#endif // KSPREAD_VALUECALC
288
This class holds the data that makes up a spreadsheet.
Definition kspread_doc.h:98
The ValueCalc class is used to perform all sorts of calculations.
Definition valuecalc.h:69
Value gcd(const Value &a, const Value &b)
greatest common divisor
Value random(double range=1.0)
random number from <0.0, range)
bool strLower(const Value &a, const Value &b, bool CS=true)
string comparison
Value sum(const Value &range, bool full=true)
basic range functions
bool gequal(const Value &a, const Value &b)
numerical comparison - greater or equal
bool strGreater(const Value &a, const Value &b, bool CS=true)
string comparison
bool naturalGequal(const Value &a, const Value &b, bool CS=true)
string or numerical comparison - greater or equal
std::map< TQString, arrayWalkFunc > awFuncs
registered array-walk functions
Definition valuecalc.h:281
bool approxEqual(const Value &a, const Value &b)
numerical comparison with a little epsilon tolerance
Value phi(Value x)
some statistical stuff TODO: we may want to move these over to a separate class or something,...
Value pi()
constants
Value factDouble(int which)
double factorial (every other number multiplied)
bool matches(const Condition &cond, Value d)
Returns true if value d matches the condition cond, built with getCond().
bool greater(const Value &a, const Value &b)
numerical comparison
Value besseli(Value v, Value x)
bessel functions - may also end up being separated from here
bool isZero(const Value &a)
comparison and related
Value roundDown(const Value &a, const Value &digits)
rounding
Value erf(Value x)
error functions (see: man erf)
Value fact(const Value &which)
some computational functions
Value sin(const Value &number)
goniometric functions
Value combin(int n, int k)
combinations
bool equal(const Value &a, const Value &b)
numerical comparison
void arrayWalk(const Value &range, Value &res, arrayWalkFunc func, Value param)
array/range walking
Value::Format format(Value::Format a, Value::Format b)
return result formatting, based on these two values
Value log(const Value &number, const Value &base)
logarithms and exponentials
void getCond(Condition &cond, Value val)
This method parses the condition in string text to the condition cond.
bool naturalLower(const Value &a, const Value &b, bool CS=true)
string or numerical comparison
Value fromBase(const Value &val, int base=16)
base conversion base -> 10
bool strEqual(const Value &a, const Value &b, bool CS=true)
string comparison
Value lcm(const Value &a, const Value &b)
lowest common multiplicator
bool naturalEqual(const Value &a, const Value &b, bool CS=true)
string or numerical comparison
bool lower(const Value &a, const Value &b)
numerical comparison
bool naturalGreater(const Value &a, const Value &b, bool CS=true)
string or numerical comparison
bool strGequal(const Value &a, const Value &b, bool CS=true)
string comparison - greater or equal
Value add(const Value &a, const Value &b)
basic arithmetic operations
Value sinh(const Value &number)
hyperbolic functions
Value base(const Value &val, int base=16, int prec=0)
base conversion 10 -> base
The ValueConverter class can convert Value between various different formats.
Provides a wrapper for cell value.
Type
The type of the restriction.
The KSpread namespace.
Definition commands.h:39