g4tools  5.4.0
value.icc
Go to the documentation of this file.
1 
2 #include "sto"
3 
4 namespace tools {
5 
6 inline bool value::assign(value& aThis,const value& aV,std::string& aError){
7  if(aThis.m_type==aV.m_type) {
8  aThis.reset();
9  if(aV.m_type==value::STRING) {
10  aThis.u.m_string = new std::string(*aV.u.m_string);
11 
12  //} else if(aV.m_type==value::ARRAY_UNSIGNED_CHAR) {
13  // aThis.u.m_array_unsigned_char =
14  // new array<unsigned char>(*aV.u.m_array_unsigned_char);
15  //} else if(aV.m_type==value::ARRAY_CHAR) {
16  // aThis.u.m_array_char = new array<char>(*aV.u.m_array_char);
17 
18  } else if(aV.m_type==value::ARRAY_UNSIGNED_SHORT) {
19  aThis.u.m_array_unsigned_short =
20  new array<unsigned short>(*aV.u.m_array_unsigned_short);
21  } else if(aV.m_type==value::ARRAY_SHORT) {
22  aThis.u.m_array_short = new array<short>(*aV.u.m_array_short);
23 
24  } else if(aV.m_type==value::ARRAY_UNSIGNED_INT) {
25  aThis.u.m_array_unsigned_int =
26  new array<unsigned int>(*aV.u.m_array_unsigned_int);
27  } else if(aV.m_type==value::ARRAY_INT) {
28  aThis.u.m_array_int = new array<int>(*aV.u.m_array_int);
29 
30  } else if(aV.m_type==value::ARRAY_UNSIGNED_INT64) {
31  aThis.u.m_array_unsigned_int64 =
32  new array<uint64>(*aV.u.m_array_unsigned_int64);
33  } else if(aV.m_type==value::ARRAY_INT64) {
34  aThis.u.m_array_int64 =
35  new array<int64>(*aV.u.m_array_int64);
36 
37  } else if(aV.m_type==value::ARRAY_FLOAT) {
38  aThis.u.m_array_float = new array<float>(*aV.u.m_array_float);
39  } else if(aV.m_type==value::ARRAY_DOUBLE) {
40  aThis.u.m_array_double = new array<double>(*aV.u.m_array_double);
41  } else if(aV.m_type==value::ARRAY_BOOL) {
42  aThis.u.m_array_bool = new array<bool>(*aV.u.m_array_bool);
43 
44  } else if(aV.m_type==value::ARRAY_STRING) {
45  aThis.u.m_array_string =
46  new array<std::string>(*aV.u.m_array_string);
47 
48  } else {
49  aThis.u = aV.u;
50  }
51  return true;
52  } else {
53  switch(aThis.m_type) {
54  case value::INT:
55  break;
56  case value::DOUBLE:
57  switch(aV.m_type) {
58  case value::INT:
59  aThis.u.m_double = aV.u.m_int;
60  return true;
61  case value::UNSIGNED_SHORT :
62  aThis.u.m_double = aV.u.m_unsigned_short;
63  return true;
64  case value::UNSIGNED_INT:
65  aThis.u.m_double = aV.u.m_unsigned_int;
66  return true;
67  case value::NONE:
68  case value::DOUBLE:
69  case value::VOID_STAR:
70  case value::BOOL:
71  case value::SHORT:
72  case value::INT64:
73  case value::FLOAT:
74  //case value::UNSIGNED_CHAR:
75  //case value::CHAR:
76  case value::UNSIGNED_INT64 :
77  case value::DOUBLE_STAR:
78  case value::FLOAT_STAR:
79  case value::INT_STAR:
80  case value::STRING:
81  //case value::ARRAY_UNSIGNED_CHAR:
82  //case value::ARRAY_CHAR:
83  case value::ARRAY_UNSIGNED_SHORT:
84  case value::ARRAY_SHORT:
85  case value::ARRAY_UNSIGNED_INT:
86  case value::ARRAY_INT:
87  case value::ARRAY_UNSIGNED_INT64:
88  case value::ARRAY_INT64:
89  case value::ARRAY_FLOAT:
90  case value::ARRAY_DOUBLE:
91  case value::ARRAY_BOOL:
92  case value::ARRAY_STRING:
93  break;
94  }
95  break;
96  case value::STRING:
97  break;
98  case value::VOID_STAR:
99  break;
100  case value::UNSIGNED_INT:
101  break;
102  case value::BOOL:
103  break;
104  case value::SHORT:
105  switch(aV.m_type) {
106  case value::INT:
107  aThis.u.m_short = (short)aV.u.m_int;
108  return true;
109  case value::NONE:
110  case value::DOUBLE:
111  case value::VOID_STAR:
112  case value::BOOL:
113  case value::SHORT:
114  case value::INT64:
115  case value::FLOAT:
116  //case value::UNSIGNED_CHAR:
117  //case value::CHAR:
118  case value::UNSIGNED_SHORT :
119  case value::UNSIGNED_INT:
120  case value::UNSIGNED_INT64 :
121  case value::DOUBLE_STAR:
122  case value::FLOAT_STAR:
123  case value::INT_STAR:
124  case value::STRING:
125  //case value::ARRAY_UNSIGNED_CHAR:
126  //case value::ARRAY_CHAR:
127  case value::ARRAY_UNSIGNED_SHORT:
128  case value::ARRAY_SHORT:
129  case value::ARRAY_UNSIGNED_INT:
130  case value::ARRAY_INT:
131  case value::ARRAY_UNSIGNED_INT64:
132  case value::ARRAY_INT64:
133  case value::ARRAY_FLOAT:
134  case value::ARRAY_DOUBLE:
135  case value::ARRAY_BOOL:
136  case value::ARRAY_STRING:
137  break;
138  }
139  break;
140  case value::FLOAT:
141  switch(aV.m_type) {
142  case value::INT:
143  aThis.u.m_float = (float)aV.u.m_int;
144  return true;
145  case value::DOUBLE:
146  aThis.u.m_float = (float)aV.u.m_double;
147  return true;
148  case value::NONE:
149  case value::VOID_STAR:
150  case value::BOOL:
151  case value::SHORT:
152  case value::INT64:
153  case value::FLOAT:
154  //case value::UNSIGNED_CHAR:
155  //case value::CHAR:
156  case value::UNSIGNED_SHORT :
157  case value::UNSIGNED_INT:
158  case value::UNSIGNED_INT64 :
159  case value::DOUBLE_STAR:
160  case value::FLOAT_STAR:
161  case value::INT_STAR:
162  case value::STRING:
163  //case value::ARRAY_UNSIGNED_CHAR:
164  //case value::ARRAY_CHAR:
165  case value::ARRAY_UNSIGNED_SHORT:
166  case value::ARRAY_SHORT:
167  case value::ARRAY_UNSIGNED_INT:
168  case value::ARRAY_INT:
169  case value::ARRAY_UNSIGNED_INT64:
170  case value::ARRAY_INT64:
171  case value::ARRAY_FLOAT:
172  case value::ARRAY_DOUBLE:
173  case value::ARRAY_BOOL:
174  case value::ARRAY_STRING:
175  break;
176  }
177  break;
178 /*
179  case value::UNSIGNED_CHAR:
180  switch(aV.m_type) {
181  case value::INT:
182  aThis.u.m_unsigned_char = (unsigned char)aV.u.m_int;
183  return true;
184  case value::NONE:
185  case value::DOUBLE:
186  case value::VOID_STAR:
187  case value::BOOL:
188  case value::SHORT:
189  case value::INT64:
190  case value::FLOAT:
191  case value::UNSIGNED_CHAR:
192  case value::CHAR:
193  case value::UNSIGNED_SHORT :
194  case value::UNSIGNED_INT:
195  case value::UNSIGNED_INT64 :
196  case value::DOUBLE_STAR:
197  case value::FLOAT_STAR:
198  case value::INT_STAR:
199  case value::STRING:
200  case value::ARRAY_UNSIGNED_CHAR:
201  case value::ARRAY_CHAR:
202  case value::ARRAY_UNSIGNED_SHORT:
203  case value::ARRAY_SHORT:
204  case value::ARRAY_UNSIGNED_INT:
205  case value::ARRAY_INT:
206  case value::ARRAY_UNSIGNED_INT64:
207  case value::ARRAY_INT64:
208  case value::ARRAY_FLOAT:
209  case value::ARRAY_DOUBLE:
210  case value::ARRAY_BOOL:
211  case value::ARRAY_STRING:
212  break;
213  }
214  break;
215  case value::CHAR:
216  switch(aV.m_type) {
217  case value::INT:
218  aThis.u.m_char = (char)aV.u.m_int;
219  return true;
220  case value::STRING:
221  if(aV.u.m_string->size()!=1) break;
222  aThis.u.m_char = (*aV.u.m_string)[0];
223  return true;
224  case value::NONE:
225  case value::DOUBLE:
226  case value::VOID_STAR:
227  case value::BOOL:
228  case value::SHORT:
229  case value::INT64:
230  case value::FLOAT:
231  case value::UNSIGNED_CHAR:
232  case value::CHAR:
233  case value::UNSIGNED_SHORT :
234  case value::UNSIGNED_INT:
235  case value::UNSIGNED_INT64 :
236  case value::DOUBLE_STAR:
237  case value::FLOAT_STAR:
238  case value::INT_STAR:
239  case value::ARRAY_UNSIGNED_CHAR:
240  case value::ARRAY_CHAR:
241  case value::ARRAY_UNSIGNED_SHORT:
242  case value::ARRAY_SHORT:
243  case value::ARRAY_UNSIGNED_INT:
244  case value::ARRAY_INT:
245  case value::ARRAY_UNSIGNED_INT64:
246  case value::ARRAY_INT64:
247  case value::ARRAY_FLOAT:
248  case value::ARRAY_DOUBLE:
249  case value::ARRAY_BOOL:
250  case value::ARRAY_STRING:
251  break;
252  }
253  break;
254 */
255  case value::NONE:
256  case value::INT64:
257  case value::UNSIGNED_SHORT :
258  case value::UNSIGNED_INT64 :
259  switch(aV.m_type) {
260  case value::INT:
261  aThis.u.m_int64 = aV.u.m_int;
262  return true;
263  case value::UNSIGNED_SHORT :
264  aThis.u.m_int64 = aV.u.m_unsigned_short;
265  return true;
266  case value::UNSIGNED_INT:
267  aThis.u.m_int64 = aV.u.m_unsigned_int;
268  return true;
269  case value::NONE:
270  case value::DOUBLE:
271  case value::VOID_STAR:
272  case value::BOOL:
273  case value::SHORT:
274  case value::INT64:
275  case value::FLOAT:
276  //case value::UNSIGNED_CHAR:
277  //case value::CHAR:
278  case value::UNSIGNED_INT64 :
279  case value::DOUBLE_STAR:
280  case value::FLOAT_STAR:
281  case value::INT_STAR:
282  case value::STRING:
283  //case value::ARRAY_UNSIGNED_CHAR:
284  //case value::ARRAY_CHAR:
285  case value::ARRAY_UNSIGNED_SHORT:
286  case value::ARRAY_SHORT:
287  case value::ARRAY_UNSIGNED_INT:
288  case value::ARRAY_INT:
289  case value::ARRAY_UNSIGNED_INT64:
290  case value::ARRAY_INT64:
291  case value::ARRAY_FLOAT:
292  case value::ARRAY_DOUBLE:
293  case value::ARRAY_BOOL:
294  case value::ARRAY_STRING:
295  break;
296  }
297  break;
298  case value::DOUBLE_STAR:
299  case value::FLOAT_STAR:
300  case value::INT_STAR:
301  //case value::ARRAY_UNSIGNED_CHAR:
302  //case value::ARRAY_CHAR:
303  case value::ARRAY_UNSIGNED_SHORT:
304  case value::ARRAY_SHORT:
305  case value::ARRAY_UNSIGNED_INT:
306  case value::ARRAY_INT:
307  case value::ARRAY_UNSIGNED_INT64:
308  case value::ARRAY_INT64:
309  case value::ARRAY_FLOAT:
310  case value::ARRAY_DOUBLE:
311  case value::ARRAY_BOOL:
312  case value::ARRAY_STRING:
313  break;
314  }
315  aError = std::string("value::assign :")
316  + " unable to assign " + aV.stype()
317  + " to " + aThis.stype();
318  aThis.set_none();
319  return false;
320  }
321 }
322 
323 inline bool value::minus(value& aThis,std::string& aError){
324  value::e_type oType = aThis.m_type;
325  switch(aThis.m_type) {
326  case value::INT:
327  aThis.u.m_int = -aThis.u.m_int;
328  return true;
329  case value::DOUBLE:
330  aThis.u.m_double = -aThis.u.m_double;
331  return true;
332  case value::SHORT:
333  aThis.u.m_short = -aThis.u.m_short;
334  return true;
335  case value::INT64:
336  aThis.u.m_int64 = -aThis.u.m_int64;
337  return true;
338  case value::FLOAT:
339  aThis.u.m_float = -1.0F * aThis.u.m_float;
340  return true;
341  case value::ARRAY_DOUBLE:{
342  std::vector<double>& stdv = aThis.u.m_array_double->vector();
343  size_t number = stdv.size();
344  for(size_t index=0;index<number;index++) stdv[index] = -stdv[index];
345  return true;}
346  //case value::CHAR:
347  // aThis.u.m_char = -aThis.u.m_char;
348  // return true;
349  //case value::UNSIGNED_CHAR:{
350  // char tmp = -1*aThis.u.m_unsigned_char;
351  // aThis.set(tmp); //this becomes a value::CHAR.
352  // return true;}
353  case value::UNSIGNED_SHORT:{
354  short tmp = -1*aThis.u.m_unsigned_short;
355  aThis.set(tmp); //this becomes a value::SHORT.
356  return true;}
357  case value::UNSIGNED_INT:{
358  int tmp = -1*aThis.u.m_unsigned_int;
359  aThis.set(tmp); //this becomes a value::INT.
360  return true;}
361  case value::UNSIGNED_INT64 :{
362  int64 tmp = -1*aThis.u.m_unsigned_int64;
363  aThis.set(tmp); //this becomes a value::INT64.
364  return true;}
365  case value::BOOL:
366  case value::NONE:
367  case value::STRING:
368  case value::VOID_STAR:
369  case value::DOUBLE_STAR:
370  case value::FLOAT_STAR:
371  case value::INT_STAR:
372  //case value::ARRAY_UNSIGNED_CHAR:
373  //case value::ARRAY_CHAR:
374  case value::ARRAY_UNSIGNED_SHORT:
375  case value::ARRAY_SHORT:
376  case value::ARRAY_UNSIGNED_INT:
377  case value::ARRAY_INT:
378  case value::ARRAY_UNSIGNED_INT64:
379  case value::ARRAY_INT64:
380  case value::ARRAY_FLOAT:
381  //case value::ARRAY_DOUBLE:
382  case value::ARRAY_BOOL:
383  case value::ARRAY_STRING:
384  break;
385  }
386  aError = std::string("value::minus :")
387  + " can't apply on type " + value::stype(oType);
388  aThis.set_none();
389  return false;
390 }
391 
392 inline bool value::do_not(value& aThis,std::string& aError){
393  value::e_type oType = aThis.m_type;
394  switch(aThis.m_type) {
395  case value::BOOL:
396  aThis.u.m_bool = aThis.u.m_bool?false:true;
397  return true;
398  case value::INT:
399  case value::DOUBLE:
400  case value::STRING:
401  case value::VOID_STAR:
402  case value::UNSIGNED_SHORT :
403  case value::UNSIGNED_INT:
404  case value::SHORT:
405  case value::FLOAT:
406  //case value::UNSIGNED_CHAR:
407  //case value::CHAR:
408  case value::NONE:
409  case value::INT64:
410  case value::UNSIGNED_INT64 :
411  case value::DOUBLE_STAR:
412  case value::FLOAT_STAR:
413  case value::INT_STAR:
414  //case value::ARRAY_UNSIGNED_CHAR:
415  //case value::ARRAY_CHAR:
416  case value::ARRAY_UNSIGNED_SHORT:
417  case value::ARRAY_SHORT:
418  case value::ARRAY_UNSIGNED_INT:
419  case value::ARRAY_INT:
420  case value::ARRAY_UNSIGNED_INT64:
421  case value::ARRAY_INT64:
422  case value::ARRAY_FLOAT:
423  case value::ARRAY_DOUBLE:
424  case value::ARRAY_BOOL:
425  case value::ARRAY_STRING:
426  break;
427  }
428  aError = std::string("value::do_not :")
429  + " can't apply on type " + value::stype(oType);
430  aThis.set_none();
431  return false;
432 }
433 
434 //////////////////////////////////////////////////////////////////////////////
435 //////////////////////////////////////////////////////////////////////////////
436 //////////////////////////////////////////////////////////////////////////////
437 
438 inline bool value::add(value& aThis,const value& aV,std::string& aError){
439  value::e_type oType = aThis.m_type;
440  switch(aThis.m_type) {
441  case value::INT:
442  switch(aV.m_type) {
443  case value::INT:
444  aThis.u.m_int += aV.u.m_int;
445  return true;
446  case value::FLOAT:{
447  float tmp = aThis.u.m_int + aV.u.m_float;
448  aThis.set(tmp);
449  return true;}
450  case value::DOUBLE:{
451  double tmp = aThis.u.m_int + aV.u.m_double;
452  aThis.set(tmp);
453  return true;}
454  case value::ARRAY_DOUBLE:{
455  int tmp = aThis.u.m_int;
456  //In the below, this becomes a value::ARRAY_DOUBLE.
457  aThis.set(aV.u.m_array_double->orders(),
458  aV.u.m_array_double->vector());
459  aThis.u.m_array_double->add(double(tmp));
460  return true;}
461  case value::NONE:
462  case value::STRING:
463  case value::VOID_STAR:
464  case value::BOOL:
465  case value::SHORT:
466  case value::INT64:
467  //case value::UNSIGNED_CHAR:
468  //case value::CHAR:
469  case value::UNSIGNED_SHORT :
470  case value::UNSIGNED_INT64 :
471  case value::DOUBLE_STAR:
472  case value::FLOAT_STAR:
473  case value::INT_STAR:
474  case value::UNSIGNED_INT:
475  //case value::ARRAY_UNSIGNED_CHAR:
476  //case value::ARRAY_CHAR:
477  case value::ARRAY_UNSIGNED_SHORT:
478  case value::ARRAY_SHORT:
479  case value::ARRAY_UNSIGNED_INT:
480  case value::ARRAY_INT:
481  case value::ARRAY_UNSIGNED_INT64:
482  case value::ARRAY_INT64:
483  case value::ARRAY_FLOAT:
484  //case value::ARRAY_DOUBLE:
485  case value::ARRAY_BOOL:
486  case value::ARRAY_STRING:
487  break;
488  }
489  break;
490  case value::FLOAT:
491  switch(aV.m_type) {
492  case value::UNSIGNED_SHORT :
493  aThis.u.m_float += aV.u.m_unsigned_short;
494  return true;
495  case value::UNSIGNED_INT:
496  aThis.u.m_float += aV.u.m_unsigned_int;
497  return true;
498  case value::SHORT:
499  aThis.u.m_float += aV.u.m_short;
500  return true;
501  case value::INT:
502  aThis.u.m_float += aV.u.m_int;
503  return true;
504  case value::FLOAT:
505  aThis.u.m_float += aV.u.m_float;
506  return true;
507  case value::DOUBLE:
508  aThis.u.m_float += (float)aV.u.m_double;
509  return true;
510  case value::ARRAY_DOUBLE:{
511  double tmp = aThis.u.m_float;
512  //In the below this becomes a value::ARRAY_DOUBLE.
513  aThis.set(aV.u.m_array_double->orders(),
514  aV.u.m_array_double->vector());
515  aThis.u.m_array_double->add(tmp);
516  return true;}
517  case value::NONE:
518  case value::STRING:
519  case value::VOID_STAR:
520  case value::BOOL:
521  case value::INT64:
522  //case value::UNSIGNED_CHAR:
523  //case value::CHAR:
524  case value::UNSIGNED_INT64 :
525  case value::DOUBLE_STAR:
526  case value::FLOAT_STAR:
527  case value::INT_STAR:
528  //case value::ARRAY_UNSIGNED_CHAR:
529  //case value::ARRAY_CHAR:
530  case value::ARRAY_UNSIGNED_SHORT:
531  case value::ARRAY_SHORT:
532  case value::ARRAY_UNSIGNED_INT:
533  case value::ARRAY_INT:
534  case value::ARRAY_UNSIGNED_INT64:
535  case value::ARRAY_INT64:
536  case value::ARRAY_FLOAT:
537  //case value::ARRAY_DOUBLE:
538  case value::ARRAY_BOOL:
539  case value::ARRAY_STRING:
540  break;
541  }
542  break;
543  case value::DOUBLE:
544  switch(aV.m_type) {
545  case value::SHORT:
546  aThis.u.m_double += aV.u.m_short;
547  return true;
548  case value::INT:
549  aThis.u.m_double += aV.u.m_int;
550  return true;
551  case value::FLOAT:
552  aThis.u.m_double += aV.u.m_float;
553  return true;
554  case value::DOUBLE:
555  aThis.u.m_double += aV.u.m_double;
556  return true;
557  case value::UNSIGNED_SHORT :
558  aThis.u.m_double += aV.u.m_unsigned_short;
559  return true;
560  case value::UNSIGNED_INT:
561  aThis.u.m_double += aV.u.m_unsigned_int;
562  return true;
563  case value::ARRAY_DOUBLE:{
564  double tmp = aThis.u.m_double;
565  //In the below this becomes a value::ARRAY_DOUBLE.
566  aThis.set(aV.u.m_array_double->orders(),
567  aV.u.m_array_double->vector());
568  aThis.u.m_array_double->add(tmp);
569  return true;}
570  case value::NONE:
571  case value::STRING:
572  case value::VOID_STAR:
573  case value::BOOL:
574  case value::INT64:
575  //case value::UNSIGNED_CHAR:
576  //case value::CHAR:
577  case value::UNSIGNED_INT64 :
578  case value::DOUBLE_STAR:
579  case value::FLOAT_STAR:
580  case value::INT_STAR:
581  //case value::ARRAY_UNSIGNED_CHAR:
582  //case value::ARRAY_CHAR:
583  case value::ARRAY_UNSIGNED_SHORT:
584  case value::ARRAY_SHORT:
585  case value::ARRAY_UNSIGNED_INT:
586  case value::ARRAY_INT:
587  case value::ARRAY_UNSIGNED_INT64:
588  case value::ARRAY_INT64:
589  case value::ARRAY_FLOAT:
590  //case value::ARRAY_DOUBLE:
591  case value::ARRAY_BOOL:
592  case value::ARRAY_STRING:
593  break;
594  }
595  break;
596  case value::UNSIGNED_INT:
597  switch(aV.m_type) {
598  case value::UNSIGNED_INT:
599  aThis.u.m_unsigned_int += aV.u.m_unsigned_int;
600  return true;
601  case value::INT:{
602  int tmp = aThis.u.m_unsigned_int + aV.u.m_int;
603  aThis.set(tmp);
604  return true;}
605  case value::FLOAT:{
606  float tmp = float(aThis.u.m_unsigned_int) + aV.u.m_float;
607  aThis.set(tmp);
608  return true;}
609  case value::DOUBLE:{
610  double tmp = double(aThis.u.m_unsigned_int) + aV.u.m_double;
611  aThis.set(tmp);
612  return true;}
613  case value::ARRAY_DOUBLE:{
614  unsigned int tmp = aThis.u.m_unsigned_int;
615  //In the below this becomes a value::ARRAY_DOUBLE.
616  aThis.set(aV.u.m_array_double->orders(),
617  aV.u.m_array_double->vector());
618  aThis.u.m_array_double->add(double(tmp));
619  return true;}
620  case value::NONE:
621  case value::STRING:
622  case value::VOID_STAR:
623  case value::BOOL:
624  case value::SHORT:
625  case value::INT64:
626  //case value::UNSIGNED_CHAR:
627  //case value::CHAR:
628  case value::UNSIGNED_SHORT :
629  case value::UNSIGNED_INT64 :
630  case value::DOUBLE_STAR:
631  case value::FLOAT_STAR:
632  case value::INT_STAR:
633  //case value::ARRAY_UNSIGNED_CHAR:
634  //case value::ARRAY_CHAR:
635  case value::ARRAY_UNSIGNED_SHORT:
636  case value::ARRAY_SHORT:
637  case value::ARRAY_UNSIGNED_INT:
638  case value::ARRAY_INT:
639  case value::ARRAY_UNSIGNED_INT64:
640  case value::ARRAY_INT64:
641  case value::ARRAY_FLOAT:
642  //case value::ARRAY_DOUBLE:
643  case value::ARRAY_BOOL:
644  case value::ARRAY_STRING:
645  break;
646  }
647  break;
648  case value::STRING:
649  switch(aV.m_type) {
650  case value::STRING:
651  aThis.set((*aThis.u.m_string)+(*aV.u.m_string));
652  return true;
653  case value::NONE:
654  case value::INT:
655  case value::DOUBLE:
656  case value::VOID_STAR:
657  case value::BOOL:
658  case value::SHORT:
659  case value::INT64:
660  case value::FLOAT:
661  //case value::UNSIGNED_CHAR:
662  //case value::CHAR:
663  case value::UNSIGNED_SHORT :
664  case value::UNSIGNED_INT:
665  case value::UNSIGNED_INT64 :
666  case value::DOUBLE_STAR:
667  case value::FLOAT_STAR:
668  case value::INT_STAR:
669  //case value::ARRAY_UNSIGNED_CHAR:
670  //case value::ARRAY_CHAR:
671  case value::ARRAY_UNSIGNED_SHORT:
672  case value::ARRAY_SHORT:
673  case value::ARRAY_UNSIGNED_INT:
674  case value::ARRAY_INT:
675  case value::ARRAY_UNSIGNED_INT64:
676  case value::ARRAY_INT64:
677  case value::ARRAY_FLOAT:
678  case value::ARRAY_DOUBLE:
679  case value::ARRAY_BOOL:
680  case value::ARRAY_STRING:
681  break;
682  }
683  break;
684  case value::ARRAY_DOUBLE:
685  switch(aV.m_type) {
686  case value::INT:
687  aThis.u.m_array_double->add(aV.u.m_int);
688  return true;
689  case value::UNSIGNED_INT:
690  aThis.u.m_array_double->add(aV.u.m_unsigned_int);
691  return true;
692  case value::DOUBLE:
693  aThis.u.m_array_double->add(aV.u.m_double);
694  return true;
695  case value::ARRAY_DOUBLE:
696  if(aThis.u.m_array_double->orders()!=aV.u.m_array_double->orders()) {
697  aError = "Value::add : vector orders mismatch.";
698  aThis.set_none();
699  return false;
700  }
701  aThis.u.m_array_double->add(*aV.u.m_array_double);
702  return true;
703  case value::NONE:
704  case value::VOID_STAR:
705  case value::BOOL:
706  case value::SHORT:
707  case value::INT64:
708  case value::FLOAT:
709  //case value::UNSIGNED_CHAR:
710  //case value::CHAR:
711  case value::UNSIGNED_SHORT :
712  case value::UNSIGNED_INT64 :
713  case value::DOUBLE_STAR:
714  case value::FLOAT_STAR:
715  case value::INT_STAR:
716  case value::STRING:
717  //case value::ARRAY_UNSIGNED_CHAR:
718  //case value::ARRAY_CHAR:
719  case value::ARRAY_UNSIGNED_SHORT:
720  case value::ARRAY_SHORT:
721  case value::ARRAY_UNSIGNED_INT:
722  case value::ARRAY_INT:
723  case value::ARRAY_UNSIGNED_INT64:
724  case value::ARRAY_INT64:
725  case value::ARRAY_FLOAT:
726  //case value::ARRAY_DOUBLE:
727  case value::ARRAY_BOOL:
728  case value::ARRAY_STRING:
729  break;
730  }
731  break;
732  case value::NONE:
733  case value::VOID_STAR:
734  case value::BOOL:
735  case value::SHORT:
736  case value::INT64:
737  //case value::UNSIGNED_CHAR:
738  //case value::CHAR:
739  case value::UNSIGNED_SHORT :
740  case value::UNSIGNED_INT64 :
741  case value::DOUBLE_STAR:
742  case value::FLOAT_STAR:
743  case value::INT_STAR:
744  //case value::ARRAY_UNSIGNED_CHAR:
745  //case value::ARRAY_CHAR:
746  case value::ARRAY_UNSIGNED_SHORT:
747  case value::ARRAY_SHORT:
748  case value::ARRAY_UNSIGNED_INT:
749  case value::ARRAY_INT:
750  case value::ARRAY_UNSIGNED_INT64:
751  case value::ARRAY_INT64:
752  case value::ARRAY_FLOAT:
753  //case value::ARRAY_DOUBLE:
754  case value::ARRAY_BOOL:
755  case value::ARRAY_STRING:
756  break;
757  }
758  aError = std::string("Value::add :" )
759  + " can't apply on type " + value::stype(oType)
760  + " and type " + aV.stype();
761  aThis.set_none();
762  return false;
763 }
764 
765 inline bool value::subtract(value& aThis,const value& aV,std::string& aError){
766  value::e_type oType = aThis.m_type;
767  switch(aThis.m_type) {
768  case value::INT:
769  switch(aV.m_type) {
770  case value::INT:
771  aThis.u.m_int -= aV.u.m_int;
772  return true;
773  case value::DOUBLE:{
774  double tmp = aThis.u.m_int - aV.u.m_double;
775  aThis.set(tmp);
776  return true;}
777  case value::FLOAT:{
778  float tmp = aThis.u.m_int - aV.u.m_float;
779  aThis.set(tmp);
780  return true;}
781  case value::ARRAY_DOUBLE:{
782  int tmp = aThis.u.m_int;
783  //In the below, this becomes a value::ARRAY_DOUBLE.
784  aThis.set(aV.u.m_array_double->orders(),
785  aV.u.m_array_double->vector());
786  aThis.u.m_array_double->multiply(-1);
787  aThis.u.m_array_double->add(double(tmp));
788  return true;}
789  case value::NONE:
790  case value::VOID_STAR:
791  case value::BOOL:
792  case value::SHORT:
793  case value::INT64:
794  //case value::UNSIGNED_CHAR:
795  //case value::CHAR:
796  case value::UNSIGNED_SHORT :
797  case value::UNSIGNED_INT:
798  case value::UNSIGNED_INT64 :
799  case value::DOUBLE_STAR:
800  case value::FLOAT_STAR:
801  case value::INT_STAR:
802  case value::STRING:
803  //case value::ARRAY_UNSIGNED_CHAR:
804  //case value::ARRAY_CHAR:
805  case value::ARRAY_UNSIGNED_SHORT:
806  case value::ARRAY_SHORT:
807  case value::ARRAY_UNSIGNED_INT:
808  case value::ARRAY_INT:
809  case value::ARRAY_UNSIGNED_INT64:
810  case value::ARRAY_INT64:
811  case value::ARRAY_FLOAT:
812  //case value::ARRAY_DOUBLE:
813  case value::ARRAY_BOOL:
814  case value::ARRAY_STRING:
815  break;
816  }
817  break;
818  case value::FLOAT:
819  switch(aV.m_type) {
820  case value::DOUBLE:{
821  double tmp = double(aThis.u.m_float) - aV.u.m_double;
822  aThis.set(tmp);
823  return true;}
824  case value::UNSIGNED_SHORT :
825  aThis.u.m_float -= aV.u.m_unsigned_short;
826  return true;
827  case value::UNSIGNED_INT:
828  aThis.u.m_float -= aV.u.m_unsigned_int;
829  return true;
830  case value::INT:
831  aThis.u.m_float -= aV.u.m_int;
832  return true;
833  case value::SHORT:
834  aThis.u.m_float -= aV.u.m_short;
835  return true;
836  case value::FLOAT:
837  aThis.u.m_float -= aV.u.m_float;
838  return true;
839  case value::INT64:{
840  double tmp = double(aThis.u.m_float) - aV.u.m_int64;
841  aThis.set(tmp);
842  return true;}
843  case value::UNSIGNED_INT64:{
844  double tmp = double(aThis.u.m_float) - aV.u.m_unsigned_int64;
845  aThis.set(tmp);
846  return true;}
847  case value::ARRAY_DOUBLE:{
848  double tmp = aThis.u.m_float;
849  //In the below, this becomes a value::ARRAY_DOUBLE.
850  aThis.set(aV.u.m_array_double->orders(),
851  aV.u.m_array_double->vector());
852  aThis.u.m_array_double->multiply(-1);
853  aThis.u.m_array_double->add(tmp);
854  return true;}
855  case value::NONE:
856  case value::VOID_STAR:
857  case value::BOOL:
858  //case value::UNSIGNED_CHAR:
859  //case value::CHAR:
860  case value::DOUBLE_STAR:
861  case value::FLOAT_STAR:
862  case value::INT_STAR:
863  case value::STRING:
864  //case value::ARRAY_UNSIGNED_CHAR:
865  //case value::ARRAY_CHAR:
866  case value::ARRAY_UNSIGNED_SHORT:
867  case value::ARRAY_SHORT:
868  case value::ARRAY_UNSIGNED_INT:
869  case value::ARRAY_INT:
870  case value::ARRAY_UNSIGNED_INT64:
871  case value::ARRAY_INT64:
872  case value::ARRAY_FLOAT:
873  //case value::ARRAY_DOUBLE:
874  case value::ARRAY_BOOL:
875  case value::ARRAY_STRING:
876  break;
877  }
878  break;
879  case value::DOUBLE:
880  switch(aV.m_type) {
881  case value::DOUBLE:
882  aThis.u.m_double -= aV.u.m_double;
883  return true;
884  case value::UNSIGNED_SHORT :
885  aThis.u.m_double -= aV.u.m_unsigned_short;
886  return true;
887  case value::UNSIGNED_INT:
888  aThis.u.m_double -= aV.u.m_unsigned_int;
889  return true;
890  case value::INT:
891  aThis.u.m_double -= aV.u.m_int;
892  return true;
893  case value::SHORT:
894  aThis.u.m_double -= aV.u.m_short;
895  return true;
896  case value::INT64:
897  aThis.u.m_double -= aV.u.m_int64;
898  return true;
899  case value::FLOAT:
900  aThis.u.m_double -= aV.u.m_float;
901  return true;
902  case value::UNSIGNED_INT64 :
903  aThis.u.m_double -= aV.u.m_unsigned_int64;
904  return true;
905  case value::ARRAY_DOUBLE:{
906  double tmp = aThis.u.m_double;
907  //In the below, this becomes a value::ARRAY_DOUBLE.
908  aThis.set(aV.u.m_array_double->orders(),
909  aV.u.m_array_double->vector());
910  aThis.u.m_array_double->multiply(-1);
911  aThis.u.m_array_double->add(tmp);
912  return true;}
913  case value::NONE:
914  case value::VOID_STAR:
915  case value::BOOL:
916  //case value::UNSIGNED_CHAR:
917  //case value::CHAR:
918  case value::DOUBLE_STAR:
919  case value::FLOAT_STAR:
920  case value::INT_STAR:
921  case value::STRING:
922  //case value::ARRAY_UNSIGNED_CHAR:
923  //case value::ARRAY_CHAR:
924  case value::ARRAY_UNSIGNED_SHORT:
925  case value::ARRAY_SHORT:
926  case value::ARRAY_UNSIGNED_INT:
927  case value::ARRAY_INT:
928  case value::ARRAY_UNSIGNED_INT64:
929  case value::ARRAY_INT64:
930  case value::ARRAY_FLOAT:
931  //case value::ARRAY_DOUBLE:
932  case value::ARRAY_BOOL:
933  case value::ARRAY_STRING:
934  break;
935  }
936  break;
937  case value::UNSIGNED_INT:
938  switch(aV.m_type) {
939  case value::UNSIGNED_INT:
940  if(aThis.u.m_unsigned_int>=aV.u.m_unsigned_int) {
941  aThis.u.m_unsigned_int -= aV.u.m_unsigned_int;
942  } else {
943  int i = int(aThis.u.m_unsigned_int) - aV.u.m_unsigned_int;
944  aThis.set(i);
945  }
946  return true;
947  case value::DOUBLE:{
948  double d = double(aThis.u.m_unsigned_int) - aV.u.m_double;
949  aThis.set(d);
950  return true;}
951  case value::FLOAT:{
952  float d = float(aThis.u.m_unsigned_int) - aV.u.m_float;
953  aThis.set(d);
954  return true;}
955  case value::INT:{
956  int d = int(aThis.u.m_unsigned_int) - aV.u.m_int;
957  aThis.set(d);
958  return true;}
959  case value::ARRAY_DOUBLE:{
960  unsigned int tmp = aThis.u.m_unsigned_int;
961  //In the below, this becomes a value::ARRAY_DOUBLE.
962  aThis.set(aV.u.m_array_double->orders(),
963  aV.u.m_array_double->vector());
964  aThis.u.m_array_double->multiply(-1);
965  aThis.u.m_array_double->add(double(tmp));
966  return true;}
967  case value::NONE:
968  case value::VOID_STAR:
969  case value::BOOL:
970  case value::SHORT:
971  case value::INT64:
972  //case value::UNSIGNED_CHAR:
973  //case value::CHAR:
974  case value::UNSIGNED_SHORT :
975  case value::UNSIGNED_INT64 :
976  case value::DOUBLE_STAR:
977  case value::FLOAT_STAR:
978  case value::INT_STAR:
979  case value::STRING:
980  //case value::ARRAY_UNSIGNED_CHAR:
981  //case value::ARRAY_CHAR:
982  case value::ARRAY_UNSIGNED_SHORT:
983  case value::ARRAY_SHORT:
984  case value::ARRAY_UNSIGNED_INT:
985  case value::ARRAY_INT:
986  case value::ARRAY_UNSIGNED_INT64:
987  case value::ARRAY_INT64:
988  case value::ARRAY_FLOAT:
989  //case value::ARRAY_DOUBLE:
990  case value::ARRAY_BOOL:
991  case value::ARRAY_STRING:
992  break;
993  }
994  break;
995  case value::ARRAY_DOUBLE:
996  switch(aV.m_type) {
997  case value::INT:
998  aThis.u.m_array_double->add(-aV.u.m_int);
999  return true;
1000  case value::UNSIGNED_INT:
1001  aThis.u.m_array_double->add(-((double)aV.u.m_unsigned_int));
1002  return true;
1003  case value::DOUBLE:
1004  aThis.u.m_array_double->add(-aV.u.m_double);
1005  return true;
1006  case value::ARRAY_DOUBLE:{
1007  if(aThis.u.m_array_double->orders()!=aV.u.m_array_double->orders()) {
1008  aError = "Value::subtract : vector orders mismatch.";
1009  aThis.set_none();
1010  return false;
1011  }
1012  std::vector<double>& stdv = aThis.u.m_array_double->vector();
1013  const std::vector<double>& stdv2 = aV.u.m_array_double->vector();
1014  size_t number = stdv.size();
1015  for(size_t index=0;index<number;index++) {
1016  stdv[index] -= stdv2[index];
1017  }
1018  return true;}
1019  case value::NONE:
1020  case value::VOID_STAR:
1021  case value::BOOL:
1022  case value::SHORT:
1023  case value::INT64:
1024  case value::FLOAT:
1025  //case value::UNSIGNED_CHAR:
1026  //case value::CHAR:
1027  case value::UNSIGNED_SHORT :
1028  case value::UNSIGNED_INT64 :
1029  case value::DOUBLE_STAR:
1030  case value::FLOAT_STAR:
1031  case value::INT_STAR:
1032  case value::STRING:
1033  //case value::ARRAY_UNSIGNED_CHAR:
1034  //case value::ARRAY_CHAR:
1035  case value::ARRAY_UNSIGNED_SHORT:
1036  case value::ARRAY_SHORT:
1037  case value::ARRAY_UNSIGNED_INT:
1038  case value::ARRAY_INT:
1039  case value::ARRAY_UNSIGNED_INT64:
1040  case value::ARRAY_INT64:
1041  case value::ARRAY_FLOAT:
1042  //case value::ARRAY_DOUBLE:
1043  case value::ARRAY_BOOL:
1044  case value::ARRAY_STRING:
1045  break;
1046  }
1047  break;
1048  case value::NONE:
1049  case value::VOID_STAR:
1050  case value::BOOL:
1051  case value::SHORT:
1052  case value::INT64:
1053  //case value::UNSIGNED_CHAR:
1054  //case value::CHAR:
1055  case value::UNSIGNED_SHORT :
1056  case value::UNSIGNED_INT64 :
1057  case value::DOUBLE_STAR:
1058  case value::FLOAT_STAR:
1059  case value::INT_STAR:
1060  case value::STRING:
1061  //case value::ARRAY_UNSIGNED_CHAR:
1062  //case value::ARRAY_CHAR:
1063  case value::ARRAY_UNSIGNED_SHORT:
1064  case value::ARRAY_SHORT:
1065  case value::ARRAY_UNSIGNED_INT:
1066  case value::ARRAY_INT:
1067  case value::ARRAY_UNSIGNED_INT64:
1068  case value::ARRAY_INT64:
1069  case value::ARRAY_FLOAT:
1070  //case value::ARRAY_DOUBLE:
1071  case value::ARRAY_BOOL:
1072  case value::ARRAY_STRING:
1073  break;
1074  }
1075  aError = std::string("Value::subtract :" )
1076  + " can't apply on type " + value::stype(oType)
1077  + " and type " + aV.stype();
1078  aThis.set_none();
1079  return false;
1080 }
1081 
1082 inline bool value::multiply(value& aThis,const value& aV,std::string& aError){
1083  value::e_type oType = aThis.m_type;
1084  switch(aThis.m_type) {
1085  case value::INT:
1086  switch(aV.m_type) {
1087  case value::INT:
1088  aThis.u.m_int *= aV.u.m_int;
1089  return true;
1090  case value::UNSIGNED_INT:
1091  aThis.u.m_int *= aV.u.m_unsigned_int;
1092  return true;
1093  case value::DOUBLE:
1094  aThis.u.m_int *= (int)aV.u.m_double;
1095  return true;
1096  case value::FLOAT:
1097  aThis.u.m_int *= (int)aV.u.m_float;
1098  return true;
1099  case value::ARRAY_DOUBLE:{
1100  int tmp = aThis.u.m_int;
1101  //In the below, this becomes a value::ARRAY_DOUBLE.
1102  aThis.set(aV.u.m_array_double->orders(),
1103  aV.u.m_array_double->vector());
1104  aThis.u.m_array_double->multiply(double(tmp));
1105  return true;}
1106  case value::NONE:
1107  case value::VOID_STAR:
1108  case value::BOOL:
1109  case value::SHORT:
1110  case value::INT64:
1111  //case value::UNSIGNED_CHAR:
1112  //case value::CHAR:
1113  case value::UNSIGNED_SHORT :
1114  case value::UNSIGNED_INT64 :
1115  case value::DOUBLE_STAR:
1116  case value::FLOAT_STAR:
1117  case value::INT_STAR:
1118  case value::STRING:
1119  //case value::ARRAY_UNSIGNED_CHAR:
1120  //case value::ARRAY_CHAR:
1121  case value::ARRAY_UNSIGNED_SHORT:
1122  case value::ARRAY_SHORT:
1123  case value::ARRAY_UNSIGNED_INT:
1124  case value::ARRAY_INT:
1125  case value::ARRAY_UNSIGNED_INT64:
1126  case value::ARRAY_INT64:
1127  case value::ARRAY_FLOAT:
1128  //case value::ARRAY_DOUBLE:
1129  case value::ARRAY_BOOL:
1130  case value::ARRAY_STRING:
1131  break;
1132  }
1133  break;
1134  case value::FLOAT:
1135  switch(aV.m_type) {
1136  case value::SHORT:
1137  aThis.u.m_float *= aV.u.m_short;
1138  return true;
1139  case value::INT:
1140  aThis.u.m_float *= aV.u.m_int;
1141  return true;
1142  case value::FLOAT:
1143  aThis.u.m_float *= aV.u.m_float;
1144  return true;
1145  case value::DOUBLE:
1146  aThis.u.m_float *= (float)aV.u.m_double;
1147  return true;
1148  case value::UNSIGNED_SHORT :
1149  aThis.u.m_float *= aV.u.m_unsigned_short;
1150  return true;
1151  case value::UNSIGNED_INT:
1152  aThis.u.m_float *= aV.u.m_unsigned_int;
1153  return true;
1154  case value::ARRAY_DOUBLE:{
1155  double tmp = aThis.u.m_float;
1156  //In the below, this becomes a value::ARRAY_DOUBLE.
1157  aThis.set(aV.u.m_array_double->orders(),
1158  aV.u.m_array_double->vector());
1159  aThis.u.m_array_double->multiply(tmp);
1160  return true;}
1161  case value::NONE:
1162  case value::VOID_STAR:
1163  case value::BOOL:
1164  case value::INT64:
1165  //case value::UNSIGNED_CHAR:
1166  //case value::CHAR:
1167  case value::UNSIGNED_INT64 :
1168  case value::DOUBLE_STAR:
1169  case value::FLOAT_STAR:
1170  case value::INT_STAR:
1171  case value::STRING:
1172  //case value::ARRAY_UNSIGNED_CHAR:
1173  //case value::ARRAY_CHAR:
1174  case value::ARRAY_UNSIGNED_SHORT:
1175  case value::ARRAY_SHORT:
1176  case value::ARRAY_UNSIGNED_INT:
1177  case value::ARRAY_INT:
1178  case value::ARRAY_UNSIGNED_INT64:
1179  case value::ARRAY_INT64:
1180  case value::ARRAY_FLOAT:
1181  //case value::ARRAY_DOUBLE:
1182  case value::ARRAY_BOOL:
1183  case value::ARRAY_STRING:
1184  break;
1185  }
1186  break;
1187  case value::DOUBLE:
1188  switch(aV.m_type) {
1189  case value::SHORT:
1190  aThis.u.m_double *= aV.u.m_short;
1191  return true;
1192  case value::INT:
1193  aThis.u.m_double *= aV.u.m_int;
1194  return true;
1195  case value::INT64:
1196  aThis.u.m_double *= aV.u.m_int64;
1197  return true;
1198  case value::FLOAT:
1199  aThis.u.m_double *= aV.u.m_float;
1200  return true;
1201  case value::DOUBLE:
1202  aThis.u.m_double *= aV.u.m_double;
1203  return true;
1204  case value::UNSIGNED_SHORT :
1205  aThis.u.m_double *= aV.u.m_unsigned_short;
1206  return true;
1207  case value::UNSIGNED_INT:
1208  aThis.u.m_double *= aV.u.m_unsigned_int;
1209  return true;
1210  case value::ARRAY_DOUBLE:{
1211  double tmp = aThis.u.m_double;
1212  //In the below, this becomes a value::ARRAY_DOUBLE.
1213  aThis.set(aV.u.m_array_double->orders(),
1214  aV.u.m_array_double->vector());
1215  aThis.u.m_array_double->multiply(tmp);
1216  return true;}
1217  case value::NONE:
1218  case value::VOID_STAR:
1219  case value::BOOL:
1220  //case value::UNSIGNED_CHAR:
1221  //case value::CHAR:
1222  case value::UNSIGNED_INT64 :
1223  case value::DOUBLE_STAR:
1224  case value::FLOAT_STAR:
1225  case value::INT_STAR:
1226  case value::STRING:
1227  //case value::ARRAY_UNSIGNED_CHAR:
1228  //case value::ARRAY_CHAR:
1229  case value::ARRAY_UNSIGNED_SHORT:
1230  case value::ARRAY_SHORT:
1231  case value::ARRAY_UNSIGNED_INT:
1232  case value::ARRAY_INT:
1233  case value::ARRAY_UNSIGNED_INT64:
1234  case value::ARRAY_INT64:
1235  case value::ARRAY_FLOAT:
1236  //case value::ARRAY_DOUBLE:
1237  case value::ARRAY_BOOL:
1238  case value::ARRAY_STRING:
1239  break;
1240  }
1241  break;
1242  case value::UNSIGNED_INT:
1243  switch(aV.m_type) {
1244  case value::FLOAT:{
1245  float tmp = aThis.u.m_unsigned_int * aV.u.m_float;
1246  aThis.set(tmp); //this becomes a value::FLOAT.
1247  return true;}
1248  case value::DOUBLE:{
1249  double tmp = aThis.u.m_unsigned_int * aV.u.m_double;
1250  aThis.set(tmp); //this becomes a value::DOUBLE.
1251  return true;}
1252  case value::INT:{
1253  int tmp = aThis.u.m_unsigned_int * aV.u.m_int;
1254  aThis.set(tmp); //this becomes a value::INT.
1255  return true;}
1256  case value::INT64:{
1257  int64 tmp = aThis.u.m_unsigned_int * aV.u.m_int64;
1258  aThis.set(tmp); //this becomes a value::INT64.
1259  return true;}
1260  case value::UNSIGNED_INT:
1261  aThis.u.m_unsigned_int *= aV.u.m_unsigned_int;
1262  return true;
1263  case value::ARRAY_DOUBLE:{
1264  unsigned int tmp = aThis.u.m_unsigned_int;
1265  //In the below, this becomes a value::ARRAY_DOUBLE.
1266  aThis.set(aV.u.m_array_double->orders(),
1267  aV.u.m_array_double->vector());
1268  aThis.u.m_array_double->multiply(double(tmp));
1269  return true;}
1270  case value::NONE:
1271  case value::VOID_STAR:
1272  case value::BOOL:
1273  case value::SHORT:
1274  //case value::UNSIGNED_CHAR:
1275  //case value::CHAR:
1276  case value::UNSIGNED_SHORT :
1277  case value::UNSIGNED_INT64 :
1278  case value::DOUBLE_STAR:
1279  case value::FLOAT_STAR:
1280  case value::INT_STAR:
1281  case value::STRING:
1282  //case value::ARRAY_UNSIGNED_CHAR:
1283  //case value::ARRAY_CHAR:
1284  case value::ARRAY_UNSIGNED_SHORT:
1285  case value::ARRAY_SHORT:
1286  case value::ARRAY_UNSIGNED_INT:
1287  case value::ARRAY_INT:
1288  case value::ARRAY_UNSIGNED_INT64:
1289  case value::ARRAY_INT64:
1290  case value::ARRAY_FLOAT:
1291  //case value::ARRAY_DOUBLE:
1292  case value::ARRAY_BOOL:
1293  case value::ARRAY_STRING:
1294  break;
1295  }
1296  break;
1297  case value::ARRAY_DOUBLE:
1298  switch(aV.m_type) {
1299  case value::INT:
1300  aThis.u.m_array_double->multiply(aV.u.m_int);
1301  return true;
1302  case value::UNSIGNED_INT:
1303  aThis.u.m_array_double->multiply(aV.u.m_unsigned_int);
1304  return true;
1305  case value::DOUBLE:
1306  aThis.u.m_array_double->multiply(aV.u.m_double);
1307  return true;
1308  case value::ARRAY_DOUBLE:{
1309  if(aThis.u.m_array_double->orders()!=aV.u.m_array_double->orders()) {
1310  aError = "Value::multiply : vector orders mismatch.";
1311  aThis.set_none();
1312  return false;
1313  }
1314  std::vector<double>& stdv = aThis.u.m_array_double->vector();
1315  const std::vector<double>& stdv2 = aV.u.m_array_double->vector();
1316  size_t number = stdv.size();
1317  for(size_t index=0;index<number;index++) {
1318  stdv[index] *= stdv2[index];
1319  }
1320  return true;}
1321  case value::NONE:
1322  case value::VOID_STAR:
1323  case value::BOOL:
1324  case value::SHORT:
1325  case value::INT64:
1326  case value::FLOAT:
1327  //case value::UNSIGNED_CHAR:
1328  //case value::CHAR:
1329  case value::UNSIGNED_SHORT :
1330  case value::UNSIGNED_INT64 :
1331  case value::DOUBLE_STAR:
1332  case value::FLOAT_STAR:
1333  case value::INT_STAR:
1334  case value::STRING:
1335  //case value::ARRAY_UNSIGNED_CHAR:
1336  //case value::ARRAY_CHAR:
1337  case value::ARRAY_UNSIGNED_SHORT:
1338  case value::ARRAY_SHORT:
1339  case value::ARRAY_UNSIGNED_INT:
1340  case value::ARRAY_INT:
1341  case value::ARRAY_UNSIGNED_INT64:
1342  case value::ARRAY_INT64:
1343  case value::ARRAY_FLOAT:
1344  //case value::ARRAY_DOUBLE:
1345  case value::ARRAY_BOOL:
1346  case value::ARRAY_STRING:
1347  break;
1348  }
1349  break;
1350  case value::NONE:
1351  case value::STRING:
1352  case value::VOID_STAR:
1353  case value::BOOL:
1354  case value::SHORT:
1355  case value::INT64:
1356  //case value::UNSIGNED_CHAR:
1357  //case value::CHAR:
1358  case value::UNSIGNED_SHORT :
1359  case value::UNSIGNED_INT64 :
1360  case value::DOUBLE_STAR:
1361  case value::FLOAT_STAR:
1362  case value::INT_STAR:
1363  //case value::ARRAY_UNSIGNED_CHAR:
1364  //case value::ARRAY_CHAR:
1365  case value::ARRAY_UNSIGNED_SHORT:
1366  case value::ARRAY_SHORT:
1367  case value::ARRAY_UNSIGNED_INT:
1368  case value::ARRAY_INT:
1369  case value::ARRAY_UNSIGNED_INT64:
1370  case value::ARRAY_INT64:
1371  case value::ARRAY_FLOAT:
1372  //case value::ARRAY_DOUBLE:
1373  case value::ARRAY_BOOL:
1374  case value::ARRAY_STRING:
1375  break;
1376  }
1377  aError = std::string("Value::multiply :" )
1378  + " can't apply on type " + value::stype(oType)
1379  + " and type " + aV.stype();
1380  aThis.set_none();
1381  return false;
1382 }
1383 
1384 inline bool value::divide(value& aThis,const value& aV,std::string& aError){
1385  value::e_type oType = aThis.m_type;
1386  switch(aThis.m_type) {
1387  case value::INT:
1388  switch(aV.m_type) {
1389  case value::INT:
1390  if(aV.u.m_int==0) {
1391  aError = value::error_div_zero();
1392  aThis.set_none();
1393  return false;
1394  } else {
1395  int tmp = aThis.u.m_int/aV.u.m_int;
1396  aThis.set(tmp);
1397  return true;
1398  }
1399  case value::FLOAT:
1400  if(aV.u.m_float==0.0F) {
1401  aError = value::error_div_zero();
1402  aThis.set_none();
1403  return false;
1404  } else {
1405  float tmp = float(aThis.u.m_int)/aV.u.m_float;
1406  aThis.set(tmp);
1407  return true;
1408  }
1409  case value::DOUBLE:
1410  if(aV.u.m_double==0) {
1411  aError = value::error_div_zero();
1412  aThis.set_none();
1413  return false;
1414  } else {
1415  double tmp = double(aThis.u.m_int)/aV.u.m_double;
1416  aThis.set(tmp);
1417  return true;
1418  }
1419  case value::ARRAY_DOUBLE:{
1420  int tmp = aThis.u.m_int;
1421  //In the below, this becomes a value::ARRAY_DOUBLE.
1422  aThis.set(aV.u.m_array_double->orders(),
1423  aV.u.m_array_double->vector());
1424  if(!aThis.u.m_array_double->invert()) {
1425  aError = value::error_div_zero();
1426  aThis.set_none();
1427  return false;
1428  }
1429  aThis.u.m_array_double->multiply((double)tmp);
1430  return true;}
1431  case value::NONE:
1432  case value::VOID_STAR:
1433  case value::BOOL:
1434  case value::SHORT:
1435  case value::INT64:
1436  //case value::UNSIGNED_CHAR:
1437  //case value::CHAR:
1438  case value::UNSIGNED_SHORT :
1439  case value::UNSIGNED_INT:
1440  case value::UNSIGNED_INT64 :
1441  case value::DOUBLE_STAR:
1442  case value::FLOAT_STAR:
1443  case value::INT_STAR:
1444  case value::STRING:
1445  //case value::ARRAY_UNSIGNED_CHAR:
1446  //case value::ARRAY_CHAR:
1447  case value::ARRAY_UNSIGNED_SHORT:
1448  case value::ARRAY_SHORT:
1449  case value::ARRAY_UNSIGNED_INT:
1450  case value::ARRAY_INT:
1451  case value::ARRAY_UNSIGNED_INT64:
1452  case value::ARRAY_INT64:
1453  case value::ARRAY_FLOAT:
1454  //case value::ARRAY_DOUBLE:
1455  case value::ARRAY_BOOL:
1456  case value::ARRAY_STRING:
1457  break;
1458  }
1459  break;
1460  case value::FLOAT:
1461  switch(aV.m_type) {
1462  case value::INT:
1463  if(aV.u.m_int==0) {
1464  aError = value::error_div_zero();
1465  aThis.set_none();
1466  return false;
1467  } else {
1468  aThis.u.m_float /= aV.u.m_int;
1469  return true;
1470  }
1471  case value::SHORT:
1472  if(aV.u.m_short==0) {
1473  aError = value::error_div_zero();
1474  aThis.set_none();
1475  return false;
1476  } else {
1477  aThis.u.m_float /= aV.u.m_short;
1478  return true;
1479  }
1480  case value::FLOAT:
1481  if(aV.u.m_float==0.0F) {
1482  aError = value::error_div_zero();
1483  aThis.set_none();
1484  return false;
1485  } else {
1486  aThis.u.m_float /= aV.u.m_float;
1487  return true;
1488  }
1489  case value::DOUBLE:
1490  if(aV.u.m_double==0.0F) {
1491  aError = value::error_div_zero();
1492  aThis.set_none();
1493  return false;
1494  } else {
1495  double tmp = double(aThis.u.m_float)/aV.u.m_double;
1496  aThis.set(tmp);
1497  return true;
1498  }
1499  case value::UNSIGNED_INT:
1500  if(aV.u.m_unsigned_int==0) {
1501  aError = value::error_div_zero();
1502  aThis.set_none();
1503  return false;
1504  } else {
1505  aThis.u.m_float /= aV.u.m_unsigned_int;
1506  return true;
1507  }
1508  case value::UNSIGNED_SHORT:
1509  if(aV.u.m_unsigned_short==0) {
1510  aError = value::error_div_zero();
1511  aThis.set_none();
1512  return false;
1513  } else {
1514  aThis.u.m_float /= aV.u.m_unsigned_short;
1515  return true;
1516  }
1517  case value::UNSIGNED_INT64:
1518  if(aV.u.m_unsigned_int64==0) {
1519  aError = value::error_div_zero();
1520  aThis.set_none();
1521  return false;
1522  } else {
1523  double tmp = double(aThis.u.m_float)/aV.u.m_unsigned_int64;
1524  aThis.set(tmp);
1525  return true;
1526  }
1527  case value::INT64:
1528  if(aV.u.m_int64==0) {
1529  aError = value::error_div_zero();
1530  aThis.set_none();
1531  return false;
1532  } else {
1533  double tmp = double(aThis.u.m_float)/aV.u.m_int64;
1534  aThis.set(tmp);
1535  return true;
1536  }
1537  case value::ARRAY_DOUBLE:{
1538  double tmp = aThis.u.m_float;
1539  //In the below, this becomes a value::ARRAY_DOUBLE.
1540  aThis.set(aV.u.m_array_double->orders(),
1541  aV.u.m_array_double->vector());
1542  if(!aThis.u.m_array_double->invert()) {
1543  aError = value::error_div_zero();
1544  aThis.set_none();
1545  return false;
1546  }
1547  aThis.u.m_array_double->multiply(tmp);
1548  return true;}
1549 
1550  case value::NONE:
1551  case value::VOID_STAR:
1552  case value::BOOL:
1553  //case value::UNSIGNED_CHAR:
1554  //case value::CHAR:
1555  case value::DOUBLE_STAR:
1556  case value::FLOAT_STAR:
1557  case value::INT_STAR:
1558  case value::STRING:
1559  //case value::ARRAY_UNSIGNED_CHAR:
1560  //case value::ARRAY_CHAR:
1561  case value::ARRAY_UNSIGNED_SHORT:
1562  case value::ARRAY_SHORT:
1563  case value::ARRAY_UNSIGNED_INT:
1564  case value::ARRAY_INT:
1565  case value::ARRAY_UNSIGNED_INT64:
1566  case value::ARRAY_INT64:
1567  case value::ARRAY_FLOAT:
1568  //case value::ARRAY_DOUBLE:
1569  case value::ARRAY_BOOL:
1570  case value::ARRAY_STRING:
1571  break;
1572  }
1573  break;
1574  case value::DOUBLE:
1575  switch(aV.m_type) {
1576  case value::SHORT:
1577  if(aV.u.m_short==0) {
1578  aError = value::error_div_zero();
1579  aThis.set_none();
1580  return false;
1581  } else {
1582  aThis.u.m_double /= aV.u.m_short;
1583  return true;
1584  }
1585  case value::INT:
1586  if(aV.u.m_int==0) {
1587  aError = value::error_div_zero();
1588  aThis.set_none();
1589  return false;
1590  } else {
1591  aThis.u.m_double /= aV.u.m_int;
1592  return true;
1593  }
1594  case value::INT64:
1595  if(aV.u.m_int64==0) {
1596  aError = value::error_div_zero();
1597  aThis.set_none();
1598  return false;
1599  } else {
1600  aThis.u.m_double /= aV.u.m_int64;
1601  return true;
1602  }
1603  case value::FLOAT:
1604  if(aV.u.m_float==0.0F) {
1605  aError = value::error_div_zero();
1606  aThis.set_none();
1607  return false;
1608  } else {
1609  aThis.u.m_double /= aV.u.m_float;
1610  return true;
1611  }
1612  case value::DOUBLE:
1613  if(aV.u.m_double==0) {
1614  aError = value::error_div_zero();
1615  aThis.set_none();
1616  return false;
1617  } else {
1618  aThis.u.m_double /= aV.u.m_double;
1619  return true;
1620  }
1621  case value::UNSIGNED_INT:
1622  if(aV.u.m_unsigned_int==0) {
1623  aError = value::error_div_zero();
1624  aThis.set_none();
1625  return false;
1626  } else {
1627  aThis.u.m_double /= aV.u.m_unsigned_int;
1628  return true;
1629  }
1630  case value::UNSIGNED_SHORT:
1631  if(aV.u.m_unsigned_short==0) {
1632  aError = value::error_div_zero();
1633  aThis.set_none();
1634  return false;
1635  } else {
1636  aThis.u.m_double /= aV.u.m_unsigned_short;
1637  return true;
1638  }
1639  case value::UNSIGNED_INT64:
1640  if(aV.u.m_unsigned_int64==0) {
1641  aError = value::error_div_zero();
1642  aThis.set_none();
1643  return false;
1644  } else {
1645  aThis.u.m_double /= aV.u.m_unsigned_int64;
1646  return true;
1647  }
1648  case value::ARRAY_DOUBLE:{
1649  double tmp = aThis.u.m_double;
1650  //In the below, this becomes a value::ARRAY_DOUBLE.
1651  aThis.set(aV.u.m_array_double->orders(),
1652  aV.u.m_array_double->vector());
1653  if(!aThis.u.m_array_double->invert()) {
1654  aError = value::error_div_zero();
1655  aThis.set_none();
1656  return false;
1657  }
1658  aThis.u.m_array_double->multiply(tmp);
1659  return true;}
1660 
1661  case value::NONE:
1662  case value::VOID_STAR:
1663  case value::BOOL:
1664  //case value::UNSIGNED_CHAR:
1665  //case value::CHAR:
1666  case value::DOUBLE_STAR:
1667  case value::FLOAT_STAR:
1668  case value::INT_STAR:
1669  case value::STRING:
1670  //case value::ARRAY_UNSIGNED_CHAR:
1671  //case value::ARRAY_CHAR:
1672  case value::ARRAY_UNSIGNED_SHORT:
1673  case value::ARRAY_SHORT:
1674  case value::ARRAY_UNSIGNED_INT:
1675  case value::ARRAY_INT:
1676  case value::ARRAY_UNSIGNED_INT64:
1677  case value::ARRAY_INT64:
1678  case value::ARRAY_FLOAT:
1679  //case value::ARRAY_DOUBLE:
1680  case value::ARRAY_BOOL:
1681  case value::ARRAY_STRING:
1682  break;
1683  }
1684  break;
1685  case value::UNSIGNED_INT:
1686  switch(aV.m_type) {
1687  case value::UNSIGNED_INT:
1688  if(aV.u.m_unsigned_int==0) {
1689  aError = value::error_div_zero();
1690  aThis.set_none();
1691  return false;
1692  } else {
1693  unsigned int tmp = aThis.u.m_unsigned_int/aV.u.m_unsigned_int;
1694  aThis.set(tmp);
1695  return true;
1696  }
1697  case value::FLOAT:
1698  if(aV.u.m_float==0) {
1699  aError = value::error_div_zero();
1700  aThis.set_none();
1701  return false;
1702  } else {
1703  float d = float(aThis.u.m_unsigned_int)/aV.u.m_float;
1704  aThis.set(d); //this becomes a value::FLOAT.
1705  return true;
1706  }
1707  case value::DOUBLE:
1708  if(aV.u.m_double==0) {
1709  aError = value::error_div_zero();
1710  aThis.set_none();
1711  return false;
1712  } else {
1713  double d = double(aThis.u.m_unsigned_int)/aV.u.m_double;
1714  aThis.set(d); //this becomes a value::DOUBLE.
1715  return true;
1716  }
1717  case value::ARRAY_DOUBLE:{
1718  unsigned int tmp = aThis.u.m_unsigned_int;
1719  //In the below, this becomes a value::ARRAY_DOUBLE.
1720  aThis.set(aV.u.m_array_double->orders(),
1721  aV.u.m_array_double->vector());
1722  if(!aThis.u.m_array_double->invert()) {
1723  aError = value::error_div_zero();
1724  aThis.set_none();
1725  return false;
1726  }
1727  aThis.u.m_array_double->multiply(double(tmp));
1728  return true;}
1729 
1730  case value::NONE:
1731  case value::INT:
1732  case value::VOID_STAR:
1733  case value::BOOL:
1734  case value::SHORT:
1735  case value::INT64:
1736  //case value::UNSIGNED_CHAR:
1737  //case value::CHAR:
1738  case value::UNSIGNED_SHORT :
1739  case value::UNSIGNED_INT64 :
1740  case value::DOUBLE_STAR:
1741  case value::FLOAT_STAR:
1742  case value::INT_STAR:
1743  case value::STRING:
1744  //case value::ARRAY_UNSIGNED_CHAR:
1745  //case value::ARRAY_CHAR:
1746  case value::ARRAY_UNSIGNED_SHORT:
1747  case value::ARRAY_SHORT:
1748  case value::ARRAY_UNSIGNED_INT:
1749  case value::ARRAY_INT:
1750  case value::ARRAY_UNSIGNED_INT64:
1751  case value::ARRAY_INT64:
1752  case value::ARRAY_FLOAT:
1753  //case value::ARRAY_DOUBLE:
1754  case value::ARRAY_BOOL:
1755  case value::ARRAY_STRING:
1756  break;
1757  }
1758  break;
1759  case value::ARRAY_DOUBLE:
1760  switch(aV.m_type) {
1761  case value::INT:
1762  if(aV.u.m_int==0) {
1763  aError = value::error_div_zero();
1764  aThis.set_none();
1765  return false;
1766  } else {
1767  double value = 1./aV.u.m_int;
1768  aThis.u.m_array_double->multiply(value);
1769  return true;
1770  }
1771  case value::UNSIGNED_INT:
1772  if(aV.u.m_unsigned_int==0) {
1773  aError = value::error_div_zero();
1774  aThis.set_none();
1775  return false;
1776  } else {
1777  double value = 1./aV.u.m_unsigned_int;
1778  aThis.u.m_array_double->multiply(value);
1779  return true;
1780  }
1781  case value::DOUBLE:
1782  if(aV.u.m_double==0) {
1783  aError = value::error_div_zero();
1784  aThis.set_none();
1785  return false;
1786  } else {
1787  aThis.u.m_array_double->multiply(1./aV.u.m_double);
1788  return true;
1789  }
1790  case value::ARRAY_DOUBLE:{
1791  if(aThis.u.m_array_double->orders()!=aV.u.m_array_double->orders()) {
1792  aError = value::error_div_zero(); //FIXME : error_mismatch_orders
1793  aThis.set_none();
1794  return false;
1795  }
1796  std::vector<double>& stdv = aThis.u.m_array_double->vector();
1797  const std::vector<double>& stdv2 = aV.u.m_array_double->vector();
1798  bool has_div_zero = false;
1799  size_t number = stdv.size();
1800  for(size_t index=0;index<number;index++) {
1801  if(stdv2[index]==0) {
1802  //FIXME : stdv[index] = nan;
1803  stdv[index] = 0; //PAW convention.
1804  has_div_zero = true;
1805  } else {
1806  stdv[index] /= stdv2[index];
1807  }
1808  }
1809  if(has_div_zero) {
1810  aError = value::error_div_zero();
1811  // For OpenPAW/pasigm::SIGMA, continue anyway in case of /0 errors.
1812  //aThis.set_none();
1813  //return false; //FIXME : is so, then it will stop Processor.
1814  return true; //FIXME : do we want that ?
1815  }
1816 
1817  return true;}
1818 
1819  case value::NONE:
1820  case value::STRING:
1821  case value::VOID_STAR:
1822  case value::BOOL:
1823  case value::SHORT:
1824  case value::FLOAT:
1825  //case value::UNSIGNED_CHAR:
1826  //case value::CHAR:
1827  case value::INT64:
1828  case value::UNSIGNED_SHORT :
1829  case value::UNSIGNED_INT64 :
1830  case value::DOUBLE_STAR:
1831  case value::FLOAT_STAR:
1832  case value::INT_STAR:
1833  //case value::ARRAY_UNSIGNED_CHAR:
1834  //case value::ARRAY_CHAR:
1835  case value::ARRAY_UNSIGNED_SHORT:
1836  case value::ARRAY_SHORT:
1837  case value::ARRAY_UNSIGNED_INT:
1838  case value::ARRAY_INT:
1839  case value::ARRAY_UNSIGNED_INT64:
1840  case value::ARRAY_INT64:
1841  case value::ARRAY_FLOAT:
1842  //case value::ARRAY_DOUBLE:
1843  case value::ARRAY_BOOL:
1844  case value::ARRAY_STRING:
1845  break;
1846  }
1847  break;
1848 
1849  case value::NONE:
1850  case value::STRING:
1851  case value::VOID_STAR:
1852  case value::BOOL:
1853  case value::SHORT:
1854  //case value::UNSIGNED_CHAR:
1855  //case value::CHAR:
1856  case value::INT64:
1857  case value::UNSIGNED_SHORT :
1858  case value::UNSIGNED_INT64 :
1859  case value::DOUBLE_STAR:
1860  case value::FLOAT_STAR:
1861  case value::INT_STAR:
1862  //case value::ARRAY_UNSIGNED_CHAR:
1863  //case value::ARRAY_CHAR:
1864  case value::ARRAY_UNSIGNED_SHORT:
1865  case value::ARRAY_SHORT:
1866  case value::ARRAY_UNSIGNED_INT:
1867  case value::ARRAY_INT:
1868  case value::ARRAY_UNSIGNED_INT64:
1869  case value::ARRAY_INT64:
1870  case value::ARRAY_FLOAT:
1871  //case value::ARRAY_DOUBLE:
1872  case value::ARRAY_BOOL:
1873  case value::ARRAY_STRING:
1874  break;
1875  }
1876  aError = std::string("Value::divide :")
1877  + " can't apply on type " + value::stype(oType)
1878  + " and type " + aV.stype();
1879  aThis.set_none();
1880  return false;
1881 }
1882 
1883 //////////////////////////////////////////////////////////////////////////////
1884 //////////////////////////////////////////////////////////////////////////////
1885 //////////////////////////////////////////////////////////////////////////////
1886 
1887 inline bool value::if_gt(value& aThis,const value& aV,std::string& aError){
1888  value::e_type oType = aThis.m_type;
1889  switch(aThis.m_type) {
1890  case value::INT:
1891  switch(aV.m_type) {
1892  case value::INT:
1893  aThis.set((bool)(aThis.u.m_int>aV.u.m_int?true:false));
1894  return true;
1895  case value::FLOAT:
1896  aThis.set((bool)(aThis.u.m_int>aV.u.m_float?true:false));
1897  return true;
1898  case value::DOUBLE:
1899  aThis.set((bool)(aThis.u.m_int>aV.u.m_double?true:false));
1900  return true;
1901  case value::UNSIGNED_SHORT :
1902  aThis.set((bool)(aThis.u.m_int>(int)aV.u.m_unsigned_short?true:false));
1903  return true;
1904  case value::UNSIGNED_INT:
1905  aThis.set((bool)(aThis.u.m_int>(int)aV.u.m_unsigned_int?true:false));
1906  return true;
1907  case value::ARRAY_DOUBLE:{
1908  const std::vector<double>& stdv = aV.u.m_array_double->vector();
1909  size_t number = stdv.size();
1910  for(size_t index=0;index<number;index++) {
1911  if(aThis.u.m_int<=stdv[index]) {
1912  aThis.set(false);
1913  return true;
1914  }
1915  }
1916  aThis.set(true);
1917  return true;
1918  }
1919  case value::NONE:
1920  case value::VOID_STAR:
1921  case value::BOOL:
1922  case value::SHORT:
1923  case value::INT64:
1924  //case value::UNSIGNED_CHAR:
1925  //case value::CHAR:
1926  case value::UNSIGNED_INT64 :
1927  case value::DOUBLE_STAR:
1928  case value::FLOAT_STAR:
1929  case value::INT_STAR:
1930  case value::STRING:
1931  //case value::ARRAY_UNSIGNED_CHAR:
1932  //case value::ARRAY_CHAR:
1933  case value::ARRAY_UNSIGNED_SHORT:
1934  case value::ARRAY_SHORT:
1935  case value::ARRAY_UNSIGNED_INT:
1936  case value::ARRAY_INT:
1937  case value::ARRAY_UNSIGNED_INT64:
1938  case value::ARRAY_INT64:
1939  case value::ARRAY_FLOAT:
1940  //case value::ARRAY_DOUBLE:
1941  case value::ARRAY_BOOL:
1942  case value::ARRAY_STRING:
1943  break;
1944  }
1945  break;
1946  case value::DOUBLE:
1947  switch(aV.m_type) {
1948  case value::DOUBLE:
1949  aThis.set((bool)(aThis.u.m_double>aV.u.m_double?true:false));
1950  return true;
1951  case value::FLOAT:
1952  aThis.set((bool)(aThis.u.m_double>aV.u.m_float?true:false));
1953  return true;
1954  case value::INT:
1955  aThis.set((bool)(aThis.u.m_double>aV.u.m_int?true:false));
1956  return true;
1957  case value::UNSIGNED_SHORT :
1958  aThis.set((bool)(aThis.u.m_double>aV.u.m_unsigned_short?true:false));
1959  return true;
1960  case value::UNSIGNED_INT:
1961  aThis.set((bool)(aThis.u.m_double>aV.u.m_unsigned_int?true:false));
1962  return true;
1963  case value::ARRAY_DOUBLE:{
1964  const std::vector<double>& stdv = aV.u.m_array_double->vector();
1965  size_t number = stdv.size();
1966  for(size_t index=0;index<number;index++) {
1967  if(aThis.u.m_double<=stdv[index]) {
1968  aThis.set(false);
1969  return true;
1970  }
1971  }
1972  aThis.set(true);
1973  return true;
1974  }
1975  case value::NONE:
1976  case value::VOID_STAR:
1977  case value::BOOL:
1978  case value::SHORT:
1979  case value::INT64:
1980  //case value::UNSIGNED_CHAR:
1981  //case value::CHAR:
1982  case value::UNSIGNED_INT64 :
1983  case value::DOUBLE_STAR:
1984  case value::FLOAT_STAR:
1985  case value::INT_STAR:
1986  case value::STRING:
1987  //case value::ARRAY_UNSIGNED_CHAR:
1988  //case value::ARRAY_CHAR:
1989  case value::ARRAY_UNSIGNED_SHORT:
1990  case value::ARRAY_SHORT:
1991  case value::ARRAY_UNSIGNED_INT:
1992  case value::ARRAY_INT:
1993  case value::ARRAY_UNSIGNED_INT64:
1994  case value::ARRAY_INT64:
1995  case value::ARRAY_FLOAT:
1996  //case value::ARRAY_DOUBLE:
1997  case value::ARRAY_BOOL:
1998  case value::ARRAY_STRING:
1999  break;
2000  }
2001  break;
2002  case value::FLOAT:
2003  switch(aV.m_type) {
2004  case value::DOUBLE:
2005  aThis.set((bool)(aThis.u.m_float>aV.u.m_double?true:false));
2006  return true;
2007  case value::FLOAT:
2008  aThis.set((bool)(aThis.u.m_float>aV.u.m_float?true:false));
2009  return true;
2010  case value::INT:
2011  aThis.set((bool)(aThis.u.m_float>aV.u.m_int?true:false));
2012  return true;
2013  case value::UNSIGNED_SHORT :
2014  aThis.set((bool)(aThis.u.m_float>aV.u.m_unsigned_short?true:false));
2015  return true;
2016  case value::UNSIGNED_INT:
2017  aThis.set((bool)(aThis.u.m_float>aV.u.m_unsigned_int?true:false));
2018  return true;
2019  case value::ARRAY_DOUBLE:{
2020  const std::vector<double>& stdv = aV.u.m_array_double->vector();
2021  size_t number = stdv.size();
2022  for(size_t index=0;index<number;index++) {
2023  if(aThis.u.m_float<=stdv[index]) {
2024  aThis.set(false);
2025  return true;
2026  }
2027  }
2028  aThis.set(true);
2029  return true;
2030  }
2031  case value::NONE:
2032  case value::VOID_STAR:
2033  case value::BOOL:
2034  case value::SHORT:
2035  case value::INT64:
2036  //case value::UNSIGNED_CHAR:
2037  //case value::CHAR:
2038  case value::UNSIGNED_INT64 :
2039  case value::DOUBLE_STAR:
2040  case value::FLOAT_STAR:
2041  case value::INT_STAR:
2042  case value::STRING:
2043  //case value::ARRAY_UNSIGNED_CHAR:
2044  //case value::ARRAY_CHAR:
2045  case value::ARRAY_UNSIGNED_SHORT:
2046  case value::ARRAY_SHORT:
2047  case value::ARRAY_UNSIGNED_INT:
2048  case value::ARRAY_INT:
2049  case value::ARRAY_UNSIGNED_INT64:
2050  case value::ARRAY_INT64:
2051  case value::ARRAY_FLOAT:
2052  //case value::ARRAY_DOUBLE:
2053  case value::ARRAY_BOOL:
2054  case value::ARRAY_STRING:
2055  break;
2056  }
2057  break;
2058  case value::VOID_STAR:
2059  switch(aV.m_type) {
2060  case value::VOID_STAR:
2061  aThis.set((bool)(aThis.u.m_void_star>aV.u.m_void_star?true:false));
2062  return true;
2063  case value::NONE:
2064  case value::INT:
2065  case value::DOUBLE:
2066  case value::BOOL:
2067  case value::SHORT:
2068  case value::INT64:
2069  case value::FLOAT:
2070  //case value::UNSIGNED_CHAR:
2071  //case value::CHAR:
2072  case value::UNSIGNED_SHORT :
2073  case value::UNSIGNED_INT:
2074  case value::UNSIGNED_INT64 :
2075  case value::DOUBLE_STAR:
2076  case value::FLOAT_STAR:
2077  case value::INT_STAR:
2078  case value::STRING:
2079  //case value::ARRAY_UNSIGNED_CHAR:
2080  //case value::ARRAY_CHAR:
2081  case value::ARRAY_UNSIGNED_SHORT:
2082  case value::ARRAY_SHORT:
2083  case value::ARRAY_UNSIGNED_INT:
2084  case value::ARRAY_INT:
2085  case value::ARRAY_UNSIGNED_INT64:
2086  case value::ARRAY_INT64:
2087  case value::ARRAY_FLOAT:
2088  case value::ARRAY_DOUBLE:
2089  case value::ARRAY_BOOL:
2090  case value::ARRAY_STRING:
2091  break;
2092  }
2093  break;
2094  case value::UNSIGNED_INT:
2095  switch(aV.m_type) {
2096  case value::UNSIGNED_INT:
2097  aThis.set((bool)(aThis.u.m_unsigned_int >aV.u.m_unsigned_int ?true:false));
2098  return true;
2099  case value::INT:
2100  aThis.set((bool)((int)aThis.u.m_unsigned_int >aV.u.m_int?true:false));
2101  return true;
2102  case value::DOUBLE:
2103  aThis.set((bool)(double(aThis.u.m_unsigned_int)>aV.u.m_double?true:false));
2104  return true;
2105  case value::FLOAT:
2106  aThis.set((bool)(float(aThis.u.m_unsigned_int)>aV.u.m_float?true:false));
2107  return true;
2108  case value::NONE:
2109  case value::VOID_STAR:
2110  case value::BOOL:
2111  case value::SHORT:
2112  case value::INT64:
2113  //case value::UNSIGNED_CHAR:
2114  //case value::CHAR:
2115  case value::UNSIGNED_SHORT :
2116  case value::UNSIGNED_INT64 :
2117  case value::DOUBLE_STAR:
2118  case value::FLOAT_STAR:
2119  case value::INT_STAR:
2120  case value::STRING:
2121  //case value::ARRAY_UNSIGNED_CHAR:
2122  //case value::ARRAY_CHAR:
2123  case value::ARRAY_UNSIGNED_SHORT:
2124  case value::ARRAY_SHORT:
2125  case value::ARRAY_UNSIGNED_INT:
2126  case value::ARRAY_INT:
2127  case value::ARRAY_UNSIGNED_INT64:
2128  case value::ARRAY_INT64:
2129  case value::ARRAY_FLOAT:
2130  case value::ARRAY_DOUBLE:
2131  case value::ARRAY_BOOL:
2132  case value::ARRAY_STRING:
2133  break;
2134  }
2135  break;
2136  case value::ARRAY_DOUBLE:
2137  switch(aV.m_type) {
2138  case value::INT:{
2139  const std::vector<double>& stdv = aThis.u.m_array_double->vector();
2140  size_t number = stdv.size();
2141  for(size_t index=0;index<number;index++) {
2142  if(stdv[index]<=aV.u.m_int) {
2143  aThis.set(false);
2144  return true;
2145  }
2146  }
2147  aThis.set(true);
2148  return true;
2149  }
2150  case value::FLOAT:{
2151  const std::vector<double>& stdv = aThis.u.m_array_double->vector();
2152  size_t number = stdv.size();
2153  for(size_t index=0;index<number;index++) {
2154  if(stdv[index]<=aV.u.m_float) {
2155  aThis.set(false);
2156  return true;
2157  }
2158  }
2159  aThis.set(true);
2160  return true;
2161  }
2162  case value::DOUBLE:{
2163  const std::vector<double>& stdv = aThis.u.m_array_double->vector();
2164  size_t number = stdv.size();
2165  for(size_t index=0;index<number;index++) {
2166  if(stdv[index]<=aV.u.m_double) {
2167  aThis.set(false);
2168  return true;
2169  }
2170  }
2171  aThis.set(true);
2172  return true;
2173  }
2174  case value::UNSIGNED_INT:{
2175  const std::vector<double>& stdv = aThis.u.m_array_double->vector();
2176  size_t number = stdv.size();
2177  for(size_t index=0;index<number;index++) {
2178  if(stdv[index]<=aV.u.m_unsigned_int ) {
2179  aThis.set(false);
2180  return true;
2181  }
2182  }
2183  aThis.set(true);
2184  return true;
2185  }
2186  case value::ARRAY_DOUBLE:{
2187  const std::vector<double>& stdv = aThis.u.m_array_double->vector();
2188  const std::vector<double>& stdv2 = aV.u.m_array_double->vector();
2189  if(stdv.size()!=stdv2.size()) break;
2190  size_t number = stdv.size();
2191  for(size_t index=0;index<number;index++) {
2192  if(stdv[index]<=stdv2[index]) {
2193  aThis.set(false);
2194  return true;
2195  }
2196  }
2197  aThis.set(true);
2198  return true;
2199  }
2200  case value::NONE:
2201  case value::VOID_STAR:
2202  case value::BOOL:
2203  case value::SHORT:
2204  case value::INT64:
2205  //case value::UNSIGNED_CHAR:
2206  //case value::CHAR:
2207  case value::UNSIGNED_SHORT :
2208  case value::UNSIGNED_INT64 :
2209  case value::DOUBLE_STAR:
2210  case value::FLOAT_STAR:
2211  case value::INT_STAR:
2212  case value::STRING:
2213  //case value::ARRAY_UNSIGNED_CHAR:
2214  //case value::ARRAY_CHAR:
2215  case value::ARRAY_UNSIGNED_SHORT:
2216  case value::ARRAY_SHORT:
2217  case value::ARRAY_UNSIGNED_INT:
2218  case value::ARRAY_INT:
2219  case value::ARRAY_UNSIGNED_INT64:
2220  case value::ARRAY_INT64:
2221  case value::ARRAY_FLOAT:
2222  //case value::ARRAY_DOUBLE:
2223  case value::ARRAY_BOOL:
2224  case value::ARRAY_STRING:
2225  break;
2226  }
2227  break;
2228  case value::NONE:
2229  case value::BOOL:
2230  case value::SHORT:
2231  //case value::UNSIGNED_CHAR:
2232  //case value::CHAR:
2233  case value::STRING:
2234  case value::INT64:
2235  case value::UNSIGNED_SHORT :
2236  case value::UNSIGNED_INT64 :
2237  case value::DOUBLE_STAR:
2238  case value::FLOAT_STAR:
2239  case value::INT_STAR:
2240  //case value::ARRAY_UNSIGNED_CHAR:
2241  //case value::ARRAY_CHAR:
2242  case value::ARRAY_UNSIGNED_SHORT:
2243  case value::ARRAY_SHORT:
2244  case value::ARRAY_UNSIGNED_INT:
2245  case value::ARRAY_INT:
2246  case value::ARRAY_UNSIGNED_INT64:
2247  case value::ARRAY_INT64:
2248  case value::ARRAY_FLOAT:
2249 //case value::ARRAY_DOUBLE:
2250  case value::ARRAY_BOOL:
2251  case value::ARRAY_STRING:
2252  break;
2253  }
2254  aError = std::string("Value::if_gt() :")
2255  + " can't compare type " + value::stype(oType)
2256  + " with type " + aV.stype();
2257  aThis.set_none();
2258  return false;
2259 }
2260 
2261 inline bool value::if_eq(value& aThis,const value& aV,std::string& aError){
2262  value::e_type oType = aThis.m_type;
2263  switch(aThis.m_type) {
2264  case value::INT:
2265  switch(aV.m_type) {
2266  case value::INT:
2267  aThis.set((bool)(aThis.u.m_int==aV.u.m_int?true:false));
2268  return true;
2269  case value::DOUBLE:
2270  aThis.set((bool)(aThis.u.m_int==aV.u.m_double?true:false));
2271  return true;
2272  case value::FLOAT:
2273  aThis.set((bool)(aThis.u.m_int==aV.u.m_float?true:false));
2274  return true;
2275  case value::UNSIGNED_SHORT :
2276  aThis.set((bool)(aThis.u.m_int==(int)aV.u.m_unsigned_short?true:false));
2277  return true;
2278  case value::UNSIGNED_INT:
2279  aThis.set((bool)(aThis.u.m_int==(int)aV.u.m_unsigned_int ?true:false));
2280  return true;
2281  case value::ARRAY_DOUBLE:{
2282  const std::vector<double>& stdv = aV.u.m_array_double->vector();
2283  size_t number = stdv.size();
2284  for(size_t index=0;index<number;index++) {
2285  if(aThis.u.m_int!=stdv[index]) {
2286  aThis.set(false);
2287  return true;
2288  }
2289  }
2290  aThis.set(true);
2291  return true;
2292  }
2293 
2294  case value::NONE:
2295  case value::STRING:
2296  case value::VOID_STAR:
2297  case value::BOOL:
2298  case value::SHORT:
2299  case value::INT64:
2300  //case value::UNSIGNED_CHAR:
2301  //case value::CHAR:
2302  case value::UNSIGNED_INT64 :
2303  case value::DOUBLE_STAR:
2304  case value::FLOAT_STAR:
2305  case value::INT_STAR:
2306 
2307  //case value::ARRAY_UNSIGNED_CHAR:
2308  //case value::ARRAY_CHAR:
2309  case value::ARRAY_UNSIGNED_SHORT:
2310  case value::ARRAY_SHORT:
2311  case value::ARRAY_UNSIGNED_INT:
2312  case value::ARRAY_INT:
2313  case value::ARRAY_UNSIGNED_INT64:
2314  case value::ARRAY_INT64:
2315  case value::ARRAY_FLOAT:
2316  //case value::ARRAY_DOUBLE:
2317  case value::ARRAY_BOOL:
2318  case value::ARRAY_STRING:
2319  break;
2320  }
2321  break;
2322  case value::FLOAT:
2323  switch(aV.m_type) {
2324  case value::FLOAT:
2325  aThis.set((bool)(aThis.u.m_float==aV.u.m_float?true:false));
2326  return true;
2327  case value::DOUBLE:
2328  aThis.set((bool)(aThis.u.m_float==aV.u.m_double?true:false));
2329  return true;
2330  case value::INT:
2331  aThis.set((bool)(aThis.u.m_float==aV.u.m_int?true:false));
2332  return true;
2333  case value::UNSIGNED_SHORT :
2334  aThis.set((bool)(aThis.u.m_float==aV.u.m_unsigned_short?true:false));
2335  return true;
2336  case value::UNSIGNED_INT:
2337  aThis.set((bool)(aThis.u.m_float==aV.u.m_unsigned_int?true:false));
2338  return true;
2339  case value::ARRAY_DOUBLE:{
2340  const std::vector<double>& stdv = aV.u.m_array_double->vector();
2341  size_t number = stdv.size();
2342  for(size_t index=0;index<number;index++) {
2343  if(aThis.u.m_float!=stdv[index]) {
2344  aThis.set(false);
2345  return true;
2346  }
2347  }
2348  aThis.set(true);
2349  return true;
2350  }
2351  case value::NONE:
2352  case value::STRING:
2353  case value::VOID_STAR:
2354  case value::BOOL:
2355  case value::SHORT:
2356  //case value::UNSIGNED_CHAR:
2357  //case value::CHAR:
2358  case value::INT64:
2359  case value::UNSIGNED_INT64 :
2360  case value::DOUBLE_STAR:
2361  case value::FLOAT_STAR:
2362  case value::INT_STAR:
2363  //case value::ARRAY_UNSIGNED_CHAR:
2364  //case value::ARRAY_CHAR:
2365  case value::ARRAY_UNSIGNED_SHORT:
2366  case value::ARRAY_SHORT:
2367  case value::ARRAY_UNSIGNED_INT:
2368  case value::ARRAY_INT:
2369  case value::ARRAY_UNSIGNED_INT64:
2370  case value::ARRAY_INT64:
2371  case value::ARRAY_FLOAT:
2372  //case value::ARRAY_DOUBLE:
2373  case value::ARRAY_BOOL:
2374  case value::ARRAY_STRING:
2375  break;
2376  }
2377  break;
2378  case value::DOUBLE:
2379  switch(aV.m_type) {
2380  case value::DOUBLE:
2381  aThis.set((bool)(aThis.u.m_double==aV.u.m_double?true:false));
2382  return true;
2383  case value::FLOAT:
2384  aThis.set((bool)(aThis.u.m_double==aV.u.m_float?true:false));
2385  return true;
2386  case value::INT:
2387  aThis.set((bool)(aThis.u.m_double==aV.u.m_int?true:false));
2388  return true;
2389  case value::UNSIGNED_SHORT :
2390  aThis.set((bool)(aThis.u.m_double==aV.u.m_unsigned_short?true:false));
2391  return true;
2392  case value::UNSIGNED_INT:
2393  aThis.set((bool)(aThis.u.m_double==aV.u.m_unsigned_int ?true:false));
2394  return true;
2395  case value::ARRAY_DOUBLE:{
2396  const std::vector<double>& stdv = aV.u.m_array_double->vector();
2397  size_t number = stdv.size();
2398  for(size_t index=0;index<number;index++) {
2399  if(aThis.u.m_double!=stdv[index]) {
2400  aThis.set(false);
2401  return true;
2402  }
2403  }
2404  aThis.set(true);
2405  return true;
2406  }
2407  case value::NONE:
2408  case value::STRING:
2409  case value::VOID_STAR:
2410  case value::BOOL:
2411  case value::SHORT:
2412  //case value::UNSIGNED_CHAR:
2413  //case value::CHAR:
2414  case value::INT64:
2415  case value::UNSIGNED_INT64 :
2416  case value::DOUBLE_STAR:
2417  case value::FLOAT_STAR:
2418  case value::INT_STAR:
2419  //case value::ARRAY_UNSIGNED_CHAR:
2420  //case value::ARRAY_CHAR:
2421  case value::ARRAY_UNSIGNED_SHORT:
2422  case value::ARRAY_SHORT:
2423  case value::ARRAY_UNSIGNED_INT:
2424  case value::ARRAY_INT:
2425  case value::ARRAY_UNSIGNED_INT64:
2426  case value::ARRAY_INT64:
2427  case value::ARRAY_FLOAT:
2428  //case value::ARRAY_DOUBLE:
2429  case value::ARRAY_BOOL:
2430  case value::ARRAY_STRING:
2431  break;
2432  }
2433  break;
2434  case value::STRING:
2435  switch(aV.m_type) {
2436  case value::STRING:
2437  aThis.set((bool)((*aThis.u.m_string)==(*aV.u.m_string)?true:false));
2438  return true;
2439  case value::INT:
2440  {int v;
2441  if(!to<int>(*aThis.u.m_string,v)) break;
2442  aThis.set((bool)(v==aV.u.m_int?true:false));
2443  return true;}
2444  case value::FLOAT:
2445  {float v;
2446  if(!to<float>(*aThis.u.m_string,v)) break;
2447  aThis.set((bool)(v==aV.u.m_float?true:false));
2448  return true;}
2449  case value::DOUBLE:
2450  {double v;
2451  if(!to<double>(*aThis.u.m_string,v)) break;
2452  aThis.set((bool)(v==aV.u.m_double?true:false));
2453  return true;}
2454  case value::UNSIGNED_INT:
2455  {typedef unsigned int uint_t;
2456  uint_t v;
2457  if(!to<uint_t>(*aThis.u.m_string,v)) break;
2458  aThis.set((bool)(v==aV.u.m_unsigned_int ?true:false));
2459  return true;}
2460  case value::BOOL:
2461  {bool v;
2462  if(!to(*aThis.u.m_string,v)) break;
2463  aThis.set((bool)(v==aV.u.m_bool?true:false));
2464  return true;}
2465  case value::NONE:
2466  case value::VOID_STAR:
2467  case value::SHORT:
2468  //case value::UNSIGNED_CHAR:
2469  //case value::CHAR:
2470  case value::INT64:
2471  case value::UNSIGNED_SHORT :
2472  case value::UNSIGNED_INT64 :
2473  case value::DOUBLE_STAR:
2474  case value::FLOAT_STAR:
2475  case value::INT_STAR:
2476  //case value::ARRAY_UNSIGNED_CHAR:
2477  //case value::ARRAY_CHAR:
2478  case value::ARRAY_UNSIGNED_SHORT:
2479  case value::ARRAY_SHORT:
2480  case value::ARRAY_UNSIGNED_INT:
2481  case value::ARRAY_INT:
2482  case value::ARRAY_UNSIGNED_INT64:
2483  case value::ARRAY_INT64:
2484  case value::ARRAY_FLOAT:
2485  case value::ARRAY_DOUBLE:
2486  case value::ARRAY_BOOL:
2487  case value::ARRAY_STRING:
2488  break;
2489  }
2490  break;
2491  case value::VOID_STAR:
2492  switch(aV.m_type) {
2493  case value::VOID_STAR:
2494  aThis.set((bool)(aThis.u.m_void_star==aV.u.m_void_star?true:false));
2495  return true;
2496  case value::NONE:
2497  case value::INT:
2498  case value::DOUBLE:
2499  case value::BOOL:
2500  case value::SHORT:
2501  case value::INT64:
2502  case value::FLOAT:
2503  //case value::UNSIGNED_CHAR:
2504  //case value::CHAR:
2505  case value::UNSIGNED_SHORT :
2506  case value::UNSIGNED_INT:
2507  case value::UNSIGNED_INT64 :
2508  case value::DOUBLE_STAR:
2509  case value::FLOAT_STAR:
2510  case value::INT_STAR:
2511  case value::STRING:
2512  //case value::ARRAY_UNSIGNED_CHAR:
2513  //case value::ARRAY_CHAR:
2514  case value::ARRAY_UNSIGNED_SHORT:
2515  case value::ARRAY_SHORT:
2516  case value::ARRAY_UNSIGNED_INT:
2517  case value::ARRAY_INT:
2518  case value::ARRAY_UNSIGNED_INT64:
2519  case value::ARRAY_INT64:
2520  case value::ARRAY_FLOAT:
2521  case value::ARRAY_DOUBLE:
2522  case value::ARRAY_BOOL:
2523  case value::ARRAY_STRING:
2524  break;
2525  }
2526  break;
2527  case value::UNSIGNED_INT:
2528  switch(aV.m_type) {
2529  case value::UNSIGNED_INT:
2530  aThis.set((bool)(aThis.u.m_unsigned_int ==aV.u.m_unsigned_int ?true:false));
2531  return true;
2532  case value::INT:
2533  aThis.set((bool)((int)aThis.u.m_unsigned_int ==aV.u.m_int?true:false));
2534  return true;
2535  case value::FLOAT:
2536  aThis.set((bool)((int)aThis.u.m_unsigned_int ==aV.u.m_float?true:false));
2537  return true;
2538  case value::DOUBLE:
2539  aThis.set((bool)((int)aThis.u.m_unsigned_int ==aV.u.m_double?true:false));
2540  return true;
2541  case value::ARRAY_DOUBLE:{
2542  const std::vector<double>& stdv = aV.u.m_array_double->vector();
2543  size_t number = stdv.size();
2544  for(size_t index=0;index<number;index++) {
2545  if(aThis.u.m_unsigned_int !=stdv[index]) {
2546  aThis.set(false);
2547  return true;
2548  }
2549  }
2550  aThis.set(true);
2551  return true;
2552  }
2553  case value::NONE:
2554  case value::BOOL:
2555  case value::VOID_STAR:
2556  case value::SHORT:
2557  case value::INT64:
2558  //case value::UNSIGNED_CHAR:
2559  //case value::CHAR:
2560  case value::UNSIGNED_SHORT :
2561  case value::UNSIGNED_INT64 :
2562  case value::DOUBLE_STAR:
2563  case value::FLOAT_STAR:
2564  case value::INT_STAR:
2565  case value::STRING:
2566  //case value::ARRAY_UNSIGNED_CHAR:
2567  //case value::ARRAY_CHAR:
2568  case value::ARRAY_UNSIGNED_SHORT:
2569  case value::ARRAY_SHORT:
2570  case value::ARRAY_UNSIGNED_INT:
2571  case value::ARRAY_INT:
2572  case value::ARRAY_UNSIGNED_INT64:
2573  case value::ARRAY_INT64:
2574  case value::ARRAY_FLOAT:
2575  //case value::ARRAY_DOUBLE:
2576  case value::ARRAY_BOOL:
2577  case value::ARRAY_STRING:
2578  break;
2579  }
2580  break;
2581  case value::BOOL:
2582  switch(aV.m_type) {
2583  case value::BOOL:
2584  aThis.u.m_bool = ((aThis.u.m_bool==aV.u.m_bool)?true:false);
2585  return true;
2586  case value::NONE:
2587  case value::INT:
2588  case value::DOUBLE:
2589  case value::VOID_STAR:
2590  case value::SHORT:
2591  case value::INT64:
2592  case value::FLOAT:
2593  //case value::UNSIGNED_CHAR:
2594  //case value::CHAR:
2595  case value::UNSIGNED_SHORT :
2596  case value::UNSIGNED_INT:
2597  case value::UNSIGNED_INT64 :
2598  case value::DOUBLE_STAR:
2599  case value::FLOAT_STAR:
2600  case value::INT_STAR:
2601  case value::STRING:
2602  //case value::ARRAY_UNSIGNED_CHAR:
2603  //case value::ARRAY_CHAR:
2604  case value::ARRAY_UNSIGNED_SHORT:
2605  case value::ARRAY_SHORT:
2606  case value::ARRAY_UNSIGNED_INT:
2607  case value::ARRAY_INT:
2608  case value::ARRAY_UNSIGNED_INT64:
2609  case value::ARRAY_INT64:
2610  case value::ARRAY_FLOAT:
2611  case value::ARRAY_DOUBLE:
2612  case value::ARRAY_BOOL:
2613  case value::ARRAY_STRING:
2614  break;
2615  }
2616  break;
2617  case value::ARRAY_DOUBLE:
2618  switch(aV.m_type) {
2619  case value::INT:{
2620  const std::vector<double>& stdv = aThis.u.m_array_double->vector();
2621  size_t number = stdv.size();
2622  for(size_t index=0;index<number;index++) {
2623  if(stdv[index]!=aV.u.m_int) {
2624  aThis.set(false);
2625  return true;
2626  }
2627  }
2628  aThis.set(true);
2629  return true;
2630  }
2631  case value::FLOAT:{
2632  const std::vector<double>& stdv = aThis.u.m_array_double->vector();
2633  size_t number = stdv.size();
2634  for(size_t index=0;index<number;index++) {
2635  if(stdv[index]!=aV.u.m_float) {
2636  aThis.set(false);
2637  return true;
2638  }
2639  }
2640  aThis.set(true);
2641  return true;
2642  }
2643  case value::DOUBLE:{
2644  const std::vector<double>& stdv = aThis.u.m_array_double->vector();
2645  size_t number = stdv.size();
2646  for(size_t index=0;index<number;index++) {
2647  if(stdv[index]!=aV.u.m_double) {
2648  aThis.set(false);
2649  return true;
2650  }
2651  }
2652  aThis.set(true);
2653  return true;
2654  }
2655  case value::UNSIGNED_INT:{
2656  const std::vector<double>& stdv = aThis.u.m_array_double->vector();
2657  size_t number = stdv.size();
2658  for(size_t index=0;index<number;index++) {
2659  if(stdv[index]!=aV.u.m_unsigned_int ) {
2660  aThis.set(false);
2661  return true;
2662  }
2663  }
2664  aThis.set(true);
2665  return true;
2666  }
2667  case value::ARRAY_DOUBLE:{
2668  const std::vector<double>& stdv = aThis.u.m_array_double->vector();
2669  const std::vector<double>& stdv2 = aV.u.m_array_double->vector();
2670  if(stdv.size()!=stdv2.size()) {
2671  aThis.set(false);
2672  return true;
2673  }
2674  size_t number = stdv.size();
2675  for(size_t index=0;index<number;index++) {
2676  if(stdv[index]!=stdv2[index]) {
2677  aThis.set(false);
2678  return true;
2679  }
2680  }
2681  aThis.set(true);
2682  return true;
2683  }
2684  case value::NONE:
2685  case value::VOID_STAR:
2686  case value::BOOL:
2687  case value::SHORT:
2688  //case value::UNSIGNED_CHAR:
2689  //case value::CHAR:
2690  case value::STRING:
2691  case value::INT64:
2692  case value::UNSIGNED_SHORT :
2693  case value::UNSIGNED_INT64 :
2694  case value::DOUBLE_STAR:
2695  case value::FLOAT_STAR:
2696  case value::INT_STAR:
2697  //case value::ARRAY_UNSIGNED_CHAR:
2698  //case value::ARRAY_CHAR:
2699  case value::ARRAY_UNSIGNED_SHORT:
2700  case value::ARRAY_SHORT:
2701  case value::ARRAY_UNSIGNED_INT:
2702  case value::ARRAY_INT:
2703  case value::ARRAY_UNSIGNED_INT64:
2704  case value::ARRAY_INT64:
2705  case value::ARRAY_FLOAT:
2706  //case value::ARRAY_DOUBLE:
2707  case value::ARRAY_BOOL:
2708  case value::ARRAY_STRING:
2709  break;
2710  }
2711  break;
2712  case value::NONE:
2713  case value::SHORT:
2714  case value::INT64:
2715  //case value::UNSIGNED_CHAR:
2716  //case value::CHAR:
2717  case value::UNSIGNED_SHORT :
2718  case value::UNSIGNED_INT64 :
2719  case value::DOUBLE_STAR:
2720  case value::FLOAT_STAR:
2721  case value::INT_STAR:
2722  //case value::ARRAY_UNSIGNED_CHAR:
2723  //case value::ARRAY_CHAR:
2724  case value::ARRAY_UNSIGNED_SHORT:
2725  case value::ARRAY_SHORT:
2726  case value::ARRAY_UNSIGNED_INT:
2727  case value::ARRAY_INT:
2728  case value::ARRAY_UNSIGNED_INT64:
2729  case value::ARRAY_INT64:
2730  case value::ARRAY_FLOAT:
2731 //case value::ARRAY_DOUBLE:
2732  case value::ARRAY_BOOL:
2733  case value::ARRAY_STRING:
2734  break;
2735  }
2736  aError = std::string("Value::if_eq() :")
2737  + " can't compare type " + value::stype(oType)
2738  + " with type " + aV.stype();
2739  aThis.set_none();
2740  return false;
2741 }
2742 
2743 inline bool value::if_and(value& aThis,const value& aV,std::string& aError){
2744  value::e_type oType = aThis.m_type;
2745  switch(aThis.m_type) {
2746  case value::BOOL:
2747  switch(aV.m_type) {
2748  case value::BOOL:
2749  aThis.u.m_bool = ((aThis.u.m_bool && aV.u.m_bool)?true:false);
2750  return true;
2751  case value::INT:
2752  case value::NONE:
2753  case value::DOUBLE:
2754  case value::STRING:
2755  case value::VOID_STAR:
2756  case value::SHORT:
2757  case value::INT64:
2758  case value::FLOAT:
2759  //case value::UNSIGNED_CHAR:
2760  //case value::CHAR:
2761  case value::UNSIGNED_SHORT :
2762  case value::UNSIGNED_INT64 :
2763  case value::DOUBLE_STAR:
2764  case value::FLOAT_STAR:
2765  case value::INT_STAR:
2766  case value::UNSIGNED_INT:
2767  //case value::ARRAY_UNSIGNED_CHAR:
2768  //case value::ARRAY_CHAR:
2769  case value::ARRAY_UNSIGNED_SHORT:
2770  case value::ARRAY_SHORT:
2771  case value::ARRAY_UNSIGNED_INT:
2772  case value::ARRAY_INT:
2773  case value::ARRAY_UNSIGNED_INT64:
2774  case value::ARRAY_INT64:
2775  case value::ARRAY_FLOAT:
2776  case value::ARRAY_DOUBLE:
2777  case value::ARRAY_BOOL:
2778  case value::ARRAY_STRING:
2779  break;
2780  }
2781  break;
2782  case value::NONE:
2783  case value::INT:
2784  case value::DOUBLE:
2785  case value::VOID_STAR:
2786  case value::SHORT:
2787  case value::INT64:
2788  case value::FLOAT:
2789  //case value::UNSIGNED_CHAR:
2790  //case value::CHAR:
2791  case value::UNSIGNED_SHORT :
2792  case value::UNSIGNED_INT:
2793  case value::UNSIGNED_INT64 :
2794  case value::DOUBLE_STAR:
2795  case value::FLOAT_STAR:
2796  case value::INT_STAR:
2797  case value::STRING:
2798  //case value::ARRAY_UNSIGNED_CHAR:
2799  //case value::ARRAY_CHAR:
2800  case value::ARRAY_UNSIGNED_SHORT:
2801  case value::ARRAY_SHORT:
2802  case value::ARRAY_UNSIGNED_INT:
2803  case value::ARRAY_INT:
2804  case value::ARRAY_UNSIGNED_INT64:
2805  case value::ARRAY_INT64:
2806  case value::ARRAY_FLOAT:
2807  case value::ARRAY_DOUBLE:
2808  case value::ARRAY_BOOL:
2809  case value::ARRAY_STRING:
2810  break;
2811  }
2812  aError = std::string("Value::if_and :")
2813  + " can't apply on type " + value::stype(oType)
2814  + " and type " + aV.stype();
2815  aThis.set_none();
2816  return false;
2817 }
2818 
2819 inline bool value::if_or(value& aThis,const value& aV,std::string& aError){
2820  value::e_type oType = aThis.m_type;
2821  switch(aThis.m_type) {
2822  case value::BOOL:
2823  switch(aV.m_type) {
2824  case value::BOOL:
2825  aThis.u.m_bool = ((aThis.u.m_bool || aV.u.m_bool)?true:false);
2826  return true;
2827  case value::INT:
2828  case value::NONE:
2829  case value::DOUBLE:
2830  case value::STRING:
2831  case value::VOID_STAR:
2832  case value::SHORT:
2833  case value::INT64:
2834  case value::FLOAT:
2835  //case value::UNSIGNED_CHAR:
2836  //case value::CHAR:
2837  case value::UNSIGNED_SHORT :
2838  case value::UNSIGNED_INT64 :
2839  case value::DOUBLE_STAR:
2840  case value::FLOAT_STAR:
2841  case value::INT_STAR:
2842  case value::UNSIGNED_INT:
2843  //case value::ARRAY_UNSIGNED_CHAR:
2844  //case value::ARRAY_CHAR:
2845  case value::ARRAY_UNSIGNED_SHORT:
2846  case value::ARRAY_SHORT:
2847  case value::ARRAY_UNSIGNED_INT:
2848  case value::ARRAY_INT:
2849  case value::ARRAY_UNSIGNED_INT64:
2850  case value::ARRAY_INT64:
2851  case value::ARRAY_FLOAT:
2852  case value::ARRAY_DOUBLE:
2853  case value::ARRAY_BOOL:
2854  case value::ARRAY_STRING:
2855  break;
2856  }
2857  break;
2858  case value::NONE:
2859  case value::INT:
2860  case value::DOUBLE:
2861  case value::VOID_STAR:
2862  case value::SHORT:
2863  case value::INT64:
2864  case value::FLOAT:
2865  //case value::UNSIGNED_CHAR:
2866  //case value::CHAR:
2867  case value::UNSIGNED_SHORT :
2868  case value::UNSIGNED_INT:
2869  case value::UNSIGNED_INT64 :
2870  case value::DOUBLE_STAR:
2871  case value::FLOAT_STAR:
2872  case value::INT_STAR:
2873  case value::STRING:
2874  //case value::ARRAY_UNSIGNED_CHAR:
2875  //case value::ARRAY_CHAR:
2876  case value::ARRAY_UNSIGNED_SHORT:
2877  case value::ARRAY_SHORT:
2878  case value::ARRAY_UNSIGNED_INT:
2879  case value::ARRAY_INT:
2880  case value::ARRAY_UNSIGNED_INT64:
2881  case value::ARRAY_INT64:
2882  case value::ARRAY_FLOAT:
2883  case value::ARRAY_DOUBLE:
2884  case value::ARRAY_BOOL:
2885  case value::ARRAY_STRING:
2886  break;
2887  }
2888  aError = std::string("Value::if_or :")
2889  + " can't apply on type " + value::stype(oType)
2890  + " and type " + aV.stype();
2891  aThis.set_none();
2892  return false;
2893 }
2894 
2895 inline bool value::to_double(const value& aThis,double& aValue){
2896  switch(aThis.m_type) {
2897  case value::INT:
2898  aValue = aThis.u.m_int;
2899  return true;
2900  case value::DOUBLE:
2901  aValue = aThis.u.m_double;
2902  return true;
2903  case value::UNSIGNED_SHORT:
2904  aValue = aThis.u.m_unsigned_short;
2905  return true;
2906  case value::UNSIGNED_INT:
2907  aValue = aThis.u.m_unsigned_int;
2908  return true;
2909  case value::SHORT:
2910  aValue = aThis.u.m_short;
2911  return true;
2912  case value::INT64:
2913  aValue = (double)aThis.u.m_int64;
2914  return true;
2915  case value::UNSIGNED_INT64:
2916  aValue = (double)aThis.u.m_unsigned_int64;
2917  return true;
2918  case value::FLOAT:
2919  aValue = aThis.u.m_float;
2920  return true;
2921  //case value::UNSIGNED_CHAR:
2922  // aValue = aThis.u.m_unsigned_char;
2923  // return true;
2924  //case value::CHAR:
2925  // aValue = aThis.u.m_char;
2926  // return true;
2927  case value::BOOL:
2928  aValue = aThis.u.m_bool?1:0;
2929  return true;
2930  case value::NONE:
2931  case value::STRING:
2932  case value::VOID_STAR:
2933  case value::DOUBLE_STAR:
2934  case value::FLOAT_STAR:
2935  case value::INT_STAR:
2936  //case value::ARRAY_UNSIGNED_CHAR:
2937  //case value::ARRAY_CHAR:
2938  case value::ARRAY_UNSIGNED_SHORT:
2939  case value::ARRAY_SHORT:
2940  case value::ARRAY_UNSIGNED_INT:
2941  case value::ARRAY_INT:
2942  case value::ARRAY_UNSIGNED_INT64:
2943  case value::ARRAY_INT64:
2944  case value::ARRAY_FLOAT:
2945  case value::ARRAY_DOUBLE:
2946  case value::ARRAY_BOOL:
2947  case value::ARRAY_STRING:
2948  break;
2949  }
2950  aValue = 0;
2951  return false;
2952 }
2953 
2954 inline bool value::cxx_type(const value& aThis,std::string& aValue){
2955  switch(aThis.m_type) {
2956  case value::INT:
2957  aValue = "int";
2958  return true;
2959  case value::DOUBLE:
2960  aValue = "double";
2961  return true;
2962  case value::STRING:
2963  aValue = "std::string";
2964  return true;
2965  case value::BOOL:
2966  aValue = "bool";
2967  return true;
2968  case value::SHORT:
2969  aValue = "short";
2970  return true;
2971  case value::FLOAT:
2972  aValue = "float";
2973  return true;
2974  //case value::CHAR:
2975  // aValue = "char";
2976  // return true;
2977  //case value::UNSIGNED_CHAR:
2978  // aValue = "unsigned char";
2979  // return true;
2980  case value::UNSIGNED_SHORT:
2981  aValue = "unsigned short";
2982  return true;
2983  case value::UNSIGNED_INT:
2984  aValue = "unsigned int";
2985  return true;
2986  case value::VOID_STAR:
2987  aValue = "void*";
2988  return true;
2989  case value::DOUBLE_STAR:
2990  aValue = "double*";
2991  return true;
2992  case value::FLOAT_STAR:
2993  aValue = "float*";
2994  return true;
2995  case value::INT_STAR:
2996  aValue = "int*";
2997  return true;
2998  case value::NONE:
2999  case value::INT64:
3000  case value::UNSIGNED_INT64:
3001  //case value::ARRAY_UNSIGNED_CHAR:
3002  //case value::ARRAY_CHAR:
3003  case value::ARRAY_UNSIGNED_SHORT:
3004  case value::ARRAY_SHORT:
3005  case value::ARRAY_UNSIGNED_INT:
3006  case value::ARRAY_INT:
3007  case value::ARRAY_UNSIGNED_INT64:
3008  case value::ARRAY_INT64:
3009  case value::ARRAY_FLOAT:
3010  case value::ARRAY_DOUBLE:
3011  case value::ARRAY_BOOL:
3012  case value::ARRAY_STRING:
3013  aValue = "";
3014  return false;
3015  }
3016  return false;
3017 }
3018 
3019 /*
3020 inline bool value::i_set(value& aThis,const Slash::Core::IValue& aValue){
3021  aThis.reset();
3022 
3023  aThis.m_type = aValue.type();
3024 
3025  switch(aValue.type()) {
3026  case value::NONE:
3027  aThis.u.m_unsigned_int64 = 0;
3028  return true;
3029  case value::CHAR:
3030  aThis.u.m_char = aValue.get_char();
3031  return true;
3032  case value::SHORT:
3033  aThis.u.m_short = aValue.get_short();
3034  return true;
3035  case value::INT:
3036  aThis.u.m_int = aValue.get_int();
3037  return true;
3038  case value::INT64:
3039  aThis.u.m_int64 = aValue.get_int64();
3040  return true;
3041  case value::UNSIGNED_INT64:
3042  aThis.u.m_unsigned_int64 = aValue.get_unsigned_int64();
3043  return true;
3044  //case value::UNSIGNED_CHAR:
3045  // aThis.u.m_unsigned_char = aValue.get_unsigned_char();
3046  // return true;
3047  case value::UNSIGNED_SHORT:
3048  aThis.u.m_unsigned_short = aValue.get_unsigned_short();
3049  return true;
3050  case value::UNSIGNED_INT:
3051  aThis.u.m_unsigned_int = aValue.get_unsigned_int();
3052  return true;
3053  case value::DOUBLE_STAR:
3054  aThis.u.m_double_star = aValue.get_double_star();
3055  return true;
3056  case value::FLOAT_STAR:
3057  aThis.u.m_float_star = aValue.get_float_star();
3058  return true;
3059  case value::INT_STAR:
3060  aThis.u.m_int_star = aValue.get_int_star();
3061  return true;
3062  case value::FLOAT:
3063  aThis.u.m_float = aValue.get_float();
3064  return true;
3065  case value::DOUBLE:
3066  aThis.u.m_double = aValue.get_double();
3067  return true;
3068  case value::VOID_STAR:
3069  aThis.u.m_void_star = aValue.get_void_star();
3070  return true;
3071  case value::BOOL:
3072  aThis.u.m_bool = aValue.get_bool();
3073  return true;
3074  case value::STRING:
3075  aThis.u.m_string = new std::string(aValue.get_string());
3076  return true;
3077 
3078  case value::ARRAY_UNSIGNED_CHAR:
3079  {std::vector<unsigned int> is;
3080  const std::vector<unsigned char>& vd = aValue.get_array_unsigned_char(is);
3081  aThis.u.m_array_unsigned_char = new array<unsigned char>();
3082  if(!aThis.u.m_array_unsigned_char->configure(is)){
3083  aThis.set_none();return false;
3084  }
3085  if(!aThis.u.m_array_unsigned_char->fill(vd)){aThis.set_none();return false;}
3086  return true;}
3087 
3088  case value::ARRAY_CHAR:
3089  {std::vector<unsigned int> is;
3090  const std::vector<char>& vd = aValue.get_array_char(is);
3091  aThis.u.m_array_char = new array<char>();
3092  if(!aThis.u.m_array_char->configure(is)){
3093  aThis.set_none();return false;
3094  }
3095  if(!aThis.u.m_array_char->fill(vd)){aThis.set_none();return false;}
3096  return true;}
3097  case value::ARRAY_UNSIGNED_SHORT:
3098  {std::vector<unsigned int> is;
3099  const std::vector<unsigned short>& vd =
3100  aValue.get_array_unsigned_short(is);
3101  aThis.u.m_array_unsigned_short = new array<unsigned short>();
3102  if(!aThis.u.m_array_unsigned_short->configure(is)){
3103  aThis.set_none();return false;
3104  }
3105  if(!aThis.u.m_array_unsigned_short->fill(vd)){
3106  aThis.set_none();return false;
3107  }
3108  return true;}
3109 
3110  case value::ARRAY_SHORT:
3111  {std::vector<unsigned int> is;
3112  const std::vector<short>& vd = aValue.get_array_short(is);
3113  aThis.u.m_array_short = new array<short>();
3114  if(!aThis.u.m_array_short->configure(is)){aThis.set_none();return false;}
3115  if(!aThis.u.m_array_short->fill(vd)){aThis.set_none();return false;}
3116  return true;}
3117 
3118  case value::ARRAY_UNSIGNED_INT:
3119  {std::vector<unsigned int> is;
3120  const std::vector<unsigned int>& vd = aValue.get_array_unsigned_int(is);
3121  aThis.u.m_array_unsigned_int = new array<unsigned int>();
3122  if(!aThis.u.m_array_unsigned_int->configure(is)){
3123  aThis.set_none();return false;
3124  }
3125  if(!aThis.u.m_array_unsigned_int->fill(vd)){
3126  aThis.set_none();return false;
3127  }
3128  return true;}
3129 
3130  case value::ARRAY_INT:
3131  {std::vector<unsigned int> is;
3132  const std::vector<int>& vd = aValue.get_array_int(is);
3133  aThis.u.m_array_int = new array<int>();
3134  if(!aThis.u.m_array_int->configure(is)){aThis.set_none();return false;}
3135  if(!aThis.u.m_array_int->fill(vd)){aThis.set_none();return false;}
3136  return true;}
3137 
3138  case value::ARRAY_UNSIGNED_INT64:
3139  {std::vector<unsigned int> is;
3140  const std::vector<uint64>& vd = aValue.get_array_unsigned_int64(is);
3141  aThis.u.m_array_unsigned_int64 = new array<uint64>();
3142  if(!aThis.u.m_array_unsigned_int64->configure(is)){
3143  aThis.set_none();return false;
3144  }
3145  if(!aThis.u.m_array_unsigned_int64->fill(vd)){
3146  aThis.set_none();return false;
3147  }
3148  return true;}
3149 
3150  case value::ARRAY_INT64:
3151  {std::vector<unsigned int> is;
3152  const std::vector<int64>& vd = aValue.get_array_int64(is);
3153  aThis.u.m_array_int64 = new array<int64>();
3154  if(!aThis.u.m_array_int64->configure(is)){aThis.set_none();return false;}
3155  if(!aThis.u.m_array_int64->fill(vd)){aThis.set_none();return false;}
3156  return true;}
3157 
3158  case value::ARRAY_FLOAT:
3159  {std::vector<unsigned int> is;
3160  const std::vector<float>& vd = aValue.get_array_float(is);
3161  aThis.u.m_array_float = new array<float>();
3162  if(!aThis.u.m_array_float->configure(is)){aThis.set_none();return false;}
3163  if(!aThis.u.m_array_float->fill(vd)){aThis.set_none();return false;}
3164  return true;}
3165 
3166  case value::ARRAY_DOUBLE:
3167  {std::vector<unsigned int> is;
3168  const std::vector<double>& vd = aValue.get_array_double(is);
3169  aThis.u.m_array_double = new array<double>();
3170  if(!aThis.u.m_array_double->configure(is)){aThis.set_none();return false;}
3171  if(!aThis.u.m_array_double->fill(vd)){aThis.set_none();return false;}
3172  return true;}
3173 
3174  case value::ARRAY_BOOL:
3175  {std::vector<unsigned int> is;
3176  const std::vector<bool>& vd = aValue.get_array_bool(is);
3177  aThis.u.m_array_bool = new array<bool>();
3178  if(!aThis.u.m_array_bool->configure(is)){aThis.set_none();return false;}
3179  if(!aThis.u.m_array_bool->fill(vd)){aThis.set_none();return false;}
3180  return true;}
3181 
3182  case value::ARRAY_STRING:
3183  {std::vector<unsigned int> is;
3184  const std::vector<std::string>& vd = aValue.get_array_string(is);
3185  aThis.u.m_array_string = new array<std::string>();
3186  if(!aThis.u.m_array_string->configure(is)){aThis.set_none();return false;}
3187  if(!aThis.u.m_array_string->fill(vd)){aThis.set_none();return false;}
3188  return true;}
3189 
3190  }
3191 
3192  aThis.set_none();
3193  return false;
3194 }
3195 */
3196 
3197 inline std::string value::to_string(const value& aThis){
3198  std::string s;
3199  switch(aThis.m_type) {
3200  case value::NONE:
3201  sprintf(s,5,"(nil)");
3202  return s;
3203  case value::INT:
3204  sprintf(s,16,"%d",aThis.u.m_int);
3205  return s;
3206  case value::DOUBLE:
3207  sprintf(s,16,"%g",aThis.u.m_double);
3208  return s;
3209  case value::VOID_STAR:
3210  sprintf(s,32,upointer_format_x(),(upointer)aThis.u.m_void_star);
3211  return s;
3212  case value::UNSIGNED_SHORT:
3213  sprintf(s,16,"%u",aThis.u.m_unsigned_short);
3214  return s;
3215  case value::UNSIGNED_INT:
3216  sprintf(s,16,"%u",aThis.u.m_unsigned_int);
3217  return s;
3218  case value::BOOL:
3219  sprintf(s,5,"%s",aThis.u.m_bool?"true":"false");
3220  return s;
3221  case value::SHORT:
3222  sprintf(s,16,"%d",aThis.u.m_short);
3223  return s;
3224  case value::INT64:{
3225  sprintf(s,16,int64_format(),aThis.u.m_int64);
3226  }return s;
3227  case value::UNSIGNED_INT64:{
3228  sprintf(s,16,int64_format(),aThis.u.m_unsigned_int64);
3229  }return s;
3230  case value::FLOAT:
3231  sprintf(s,16,"%g",aThis.u.m_float);
3232  return s;
3233  //case value::UNSIGNED_CHAR:
3234  // sprintf(s,16,"%c",aThis.u.m_unsigned_char);
3235  // return s;
3236  //case value::CHAR:
3237  // sprintf(s,16,"%c",aThis.u.m_char);
3238  // return s;
3239  case value::DOUBLE_STAR:
3240  sprintf(s,32,upointer_format_x(),(upointer)aThis.u.m_double_star);
3241  return s;
3242  case value::FLOAT_STAR:
3243  sprintf(s,32,upointer_format_x(),(upointer)aThis.u.m_float_star);
3244  return s;
3245  case value::INT_STAR:
3246  sprintf(s,32,upointer_format_x(),(upointer)aThis.u.m_int_star);
3247  return s;
3248  case value::STRING:
3249  return *aThis.u.m_string;
3250 
3251  //case value::ARRAY_UNSIGNED_CHAR:
3252  // return tos<unsigned char>(aThis.u.m_array_unsigned_char->vector());
3253  //case value::ARRAY_CHAR:
3254  // return tos<char>(aThis.u.m_array_char->vector());
3255  case value::ARRAY_UNSIGNED_SHORT:
3256  if(!nums2s<unsigned short>(aThis.u.m_array_unsigned_short->vector(),s)) {}
3257  return s;
3258  case value::ARRAY_SHORT:
3259  if(!nums2s<short>(aThis.u.m_array_short->vector(),s)) {}
3260  return s;
3261 
3262  case value::ARRAY_UNSIGNED_INT:
3263  if(!nums2s<unsigned int>(aThis.u.m_array_unsigned_int->vector(),s)) {}
3264  return s;
3265  case value::ARRAY_INT:
3266  if(!nums2s<int>(aThis.u.m_array_int->vector(),s)) {}
3267  return s;
3268 
3269  case value::ARRAY_UNSIGNED_INT64:
3270  if(!nums2s<uint64>(aThis.u.m_array_unsigned_int64->vector(),s)) {}
3271  return s;
3272  case value::ARRAY_INT64:
3273  if(!nums2s<int64>(aThis.u.m_array_int64->vector(),s)) {}
3274  return s;
3275 
3276  case value::ARRAY_FLOAT:
3277  if(!nums2s<float>(aThis.u.m_array_float->vector(),s)) {}
3278  return s;
3279  case value::ARRAY_DOUBLE:
3280  if(!nums2s<double>(aThis.u.m_array_double->vector(),s)) {}
3281  return s;
3282  case value::ARRAY_BOOL:
3283  b2s(aThis.u.m_array_bool->vector(),s);
3284  return s;
3285  case value::ARRAY_STRING:
3286  if(!nums2s<std::string>(aThis.u.m_array_string->vector(),s)) {}
3287  return s;
3288  default:
3289  return "unknown"; //it should not happen.
3290  }
3291 }
3292 
3293 }