26#include "valueconverter.h"
39Value func_AsciiToChar (valVector args, ValueCalc *calc, FuncExtra *);
40Value func_CharToAscii (valVector args, ValueCalc *calc, FuncExtra *);
41Value func_inttobool (valVector args, ValueCalc *calc, FuncExtra *);
42Value func_booltoint (valVector args, ValueCalc *calc, FuncExtra *);
46void RegisterConversionFunctions()
48 FunctionRepository* repo = FunctionRepository::self();
51 f = new Function ( "ARABIC", func_arabic);
53 f = new Function ( "CARX", func_carx);
56 f = new Function ( "CARY", func_cary);
59 f = new Function ( "DECSEX", func_decsex);
61 f = new Function ( "POLR", func_polr);
64 f = new Function ( "POLA", func_pola);
67 f = new Function ( "ROMAN", func_roman);
69 f = new Function ( "SEXDEC", func_sexdec);
70 f->setParamCount (1, 3);
72 f = new Function ( "ASCIITOCHAR", func_AsciiToChar);
73 f->setParamCount (1, -1);
76 f = new Function ( "CHARTOASCII", func_CharToAscii);
78 f = new Function ( "BOOL2INT", func_booltoint);
80 f = new Function ( "INT2BOOL", func_inttobool);
82 f = new Function ( "BOOL2STRING", func_ToString);
84 f = new Function ( "NUM2STRING", func_ToString);
86 f = new Function ( "STRING", func_ToString);
96 Value res = calc->sqrt (calc-> add (calc->sqr (a), calc->sqr (b)));
104 Value polr = func_polr (args, calc, 0);
107 Value res = calc->acos (calc->div (args[0], polr));
115 Value res = calc->mul (args[0], calc->cos (args[1]));
123 Value res = calc->mul (args[0], calc-> sin (args[1]));
133 return calc->conv()->asTime (calc->div (args[0], 24));
139 if (args.count() == 1)
142 Value time = calc->conv()->asTime (args[0]);
143 return calc->mul (calc->conv()->asFloat (time), 24);
150 Value res = calc-> add (h, calc->div (m, 60));
151 if (args.count() == 3) {
153 res = calc-> add (res, calc->div (s, 3600));
161 const TQCString RNUnits[] = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
162 const TQCString RNTens[] = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
163 const TQCString RNHundreds[] = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
164 const TQCString RNThousands[] = { "", "M", "MM", "MMM"};
167 long value = calc->conv()->asInteger (args[0]). asInteger ();
168 if ((value < 0) || (value > 3999))
171 result = TQString::fromLatin1 (RNThousands[(value / 1000)] +
172 RNHundreds[(value / 100) % 10] +
173 RNTens[(value / 10 ) % 10] +
174 RNUnits[(value) % 10]);
175 return Value (result);
180int func_arabic_helper (TQChar c)
182 switch (c.upper().unicode())
184 case 'M': return 1000;
185 case 'D': return 500;
186 case 'C': return 100;
198 TQString roman = calc->conv()->asString (args[0]). asString();
201 int val = 0, lastd = 0, d = 0;
203 for ( unsigned i = 0; i < roman.length(); i++) {
204 d = func_arabic_helper( roman[i] );
207 if( lastd < d ) val -= lastd;
211 if( lastd < d ) val -= lastd;
221 for ( unsigned int row = 0; row < val. rows(); ++row)
222 for ( unsigned int col = 0; col < val. columns(); ++col)
223 func_a2c_helper (calc, s, val. element (col, row));
225 int v = calc->conv()->asInteger (val). asInteger();
233Value func_AsciiToChar (valVector args, ValueCalc *calc, FuncExtra *)
236 for ( unsigned int i = 0; i < args.count(); i++)
237 func_a2c_helper (calc, str, args[i]);
242Value func_CharToAscii (valVector args, ValueCalc *calc, FuncExtra *)
244 TQString val = calc->conv()->asString (args[0]). asString ();
245 if (val.length() == 1)
246 return Value (TQString (val[0]));
251Value func_inttobool (valVector args, ValueCalc *calc, FuncExtra *)
253 return calc->conv()->asBoolean (args[0]);
257Value func_booltoint (valVector args, ValueCalc *calc, FuncExtra *)
259 return calc->conv()->asInteger (args[0]);
265 return calc->conv()->asString (args[0]);
The ValueCalc class is used to perform all sorts of calculations.
bool isZero(const Value &a) comparison and related
Value sin(const Value &number) goniometric functions
Value add(const Value &a, const Value &b) basic arithmetic operations
Provides a wrapper for cell value.
unsigned columns() const If this value is an array, return the number of columns.
Value element(unsigned column, unsigned row) const Return an element in the array value.
static const Value & errorDIV0() Returns constant reference to #DIV/0! error.
unsigned rows() const If this value is an array, return the number of rows.
bool isArray() const Returns true if the type of this value is array.
long asInteger() const Returns the integer value of this value.
TQString asString() const Returns the string value of this value.
static const Value & errorVALUE() Returns constant reference to #VALUE! error.
static const Value & errorNA() Returns constant reference to #N/A error.
|