Files
geant4/source/analysis/g4tools/include/tools/value.icc
T
2016-06-30 14:12:05 +02:00

3189 lines
92 KiB
Plaintext

#include "sto"
namespace tools {
inline bool value::assign(value& aThis,const value& aV,std::string& aError){
if(aThis.m_type==aV.m_type) {
aThis.reset();
if(aV.m_type==value::STRING) {
aThis.u.m_string = new std::string(*aV.u.m_string);
//} else if(aV.m_type==value::ARRAY_UNSIGNED_CHAR) {
// aThis.u.m_array_unsigned_char =
// new tools::array<unsigned char>(*aV.u.m_array_unsigned_char);
//} else if(aV.m_type==value::ARRAY_CHAR) {
// aThis.u.m_array_char = new tools::array<char>(*aV.u.m_array_char);
} else if(aV.m_type==value::ARRAY_UNSIGNED_SHORT) {
aThis.u.m_array_unsigned_short =
new tools::array<unsigned short>(*aV.u.m_array_unsigned_short);
} else if(aV.m_type==value::ARRAY_SHORT) {
aThis.u.m_array_short = new tools::array<short>(*aV.u.m_array_short);
} else if(aV.m_type==value::ARRAY_UNSIGNED_INT) {
aThis.u.m_array_unsigned_int =
new tools::array<unsigned int>(*aV.u.m_array_unsigned_int);
} else if(aV.m_type==value::ARRAY_INT) {
aThis.u.m_array_int = new tools::array<int>(*aV.u.m_array_int);
} else if(aV.m_type==value::ARRAY_UNSIGNED_INT64) {
aThis.u.m_array_unsigned_int64 =
new tools::array<uint64>(*aV.u.m_array_unsigned_int64);
} else if(aV.m_type==value::ARRAY_INT64) {
aThis.u.m_array_int64 =
new tools::array<int64>(*aV.u.m_array_int64);
} else if(aV.m_type==value::ARRAY_FLOAT) {
aThis.u.m_array_float = new tools::array<float>(*aV.u.m_array_float);
} else if(aV.m_type==value::ARRAY_DOUBLE) {
aThis.u.m_array_double = new tools::array<double>(*aV.u.m_array_double);
} else if(aV.m_type==value::ARRAY_BOOL) {
aThis.u.m_array_bool = new tools::array<bool>(*aV.u.m_array_bool);
} else if(aV.m_type==value::ARRAY_STRING) {
aThis.u.m_array_string =
new tools::array<std::string>(*aV.u.m_array_string);
} else {
aThis.u = aV.u;
}
return true;
} else {
switch(aThis.m_type) {
case value::INT:
break;
case value::DOUBLE:
switch(aV.m_type) {
case value::INT:
aThis.u.m_double = aV.u.m_int;
return true;
case value::UNSIGNED_SHORT :
aThis.u.m_double = aV.u.m_unsigned_short;
return true;
case value::UNSIGNED_INT:
aThis.u.m_double = aV.u.m_unsigned_int;
return true;
case value::NONE:
case value::DOUBLE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::STRING:
break;
case value::VOID_STAR:
break;
case value::UNSIGNED_INT:
break;
case value::BOOL:
break;
case value::SHORT:
switch(aV.m_type) {
case value::INT:
aThis.u.m_short = (short)aV.u.m_int;
return true;
case value::NONE:
case value::DOUBLE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::FLOAT:
switch(aV.m_type) {
case value::INT:
aThis.u.m_float = (float)aV.u.m_int;
return true;
case value::DOUBLE:
aThis.u.m_float = (float)aV.u.m_double;
return true;
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
/*
case value::UNSIGNED_CHAR:
switch(aV.m_type) {
case value::INT:
aThis.u.m_unsigned_char = (unsigned char)aV.u.m_int;
return true;
case value::NONE:
case value::DOUBLE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
case value::UNSIGNED_CHAR:
case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
case value::ARRAY_UNSIGNED_CHAR:
case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::CHAR:
switch(aV.m_type) {
case value::INT:
aThis.u.m_char = (char)aV.u.m_int;
return true;
case value::STRING:
if(aV.u.m_string->size()!=1) break;
aThis.u.m_char = (*aV.u.m_string)[0];
return true;
case value::NONE:
case value::DOUBLE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
case value::UNSIGNED_CHAR:
case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::ARRAY_UNSIGNED_CHAR:
case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
*/
case value::NONE:
case value::INT64:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
switch(aV.m_type) {
case value::INT:
aThis.u.m_int64 = aV.u.m_int;
return true;
case value::UNSIGNED_SHORT :
aThis.u.m_int64 = aV.u.m_unsigned_short;
return true;
case value::UNSIGNED_INT:
aThis.u.m_int64 = aV.u.m_unsigned_int;
return true;
case value::NONE:
case value::DOUBLE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("value::assign :")
+ " unable to assign " + aV.stype()
+ " to " + aThis.stype();
aThis.set_none();
return false;
}
}
inline bool value::minus(value& aThis,std::string& aError){
value::e_type oType = aThis.m_type;
switch(aThis.m_type) {
case value::INT:
aThis.u.m_int = -aThis.u.m_int;
return true;
case value::DOUBLE:
aThis.u.m_double = -aThis.u.m_double;
return true;
case value::SHORT:
aThis.u.m_short = -aThis.u.m_short;
return true;
case value::INT64:
aThis.u.m_int64 = -aThis.u.m_int64;
return true;
case value::FLOAT:
aThis.u.m_float = -1.0F * aThis.u.m_float;
return true;
case value::ARRAY_DOUBLE:{
std::vector<double>& stdv = aThis.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) stdv[index] = -stdv[index];
return true;}
//case value::CHAR:
// aThis.u.m_char = -aThis.u.m_char;
// return true;
//case value::UNSIGNED_CHAR:{
// char tmp = -1*aThis.u.m_unsigned_char;
// aThis.set(tmp); //this becomes a value::CHAR.
// return true;}
case value::UNSIGNED_SHORT:{
short tmp = -1*aThis.u.m_unsigned_short;
aThis.set(tmp); //this becomes a value::SHORT.
return true;}
case value::UNSIGNED_INT:{
int tmp = -1*aThis.u.m_unsigned_int;
aThis.set(tmp); //this becomes a value::INT.
return true;}
case value::UNSIGNED_INT64 :{
int64 tmp = -1*aThis.u.m_unsigned_int64;
aThis.set(tmp); //this becomes a value::INT64.
return true;}
case value::BOOL:
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("value::minus :")
+ " can't apply on type " + value::stype(oType);
aThis.set_none();
return false;
}
inline bool value::do_not(value& aThis,std::string& aError){
value::e_type oType = aThis.m_type;
switch(aThis.m_type) {
case value::BOOL:
aThis.u.m_bool = aThis.u.m_bool?false:true;
return true;
case value::INT:
case value::DOUBLE:
case value::STRING:
case value::VOID_STAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::SHORT:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::NONE:
case value::INT64:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("value::do_not :")
+ " can't apply on type " + value::stype(oType);
aThis.set_none();
return false;
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
inline bool value::add(value& aThis,const value& aV,std::string& aError){
value::e_type oType = aThis.m_type;
switch(aThis.m_type) {
case value::INT:
switch(aV.m_type) {
case value::INT:
aThis.u.m_int += aV.u.m_int;
return true;
case value::FLOAT:{
float tmp = aThis.u.m_int + aV.u.m_float;
aThis.set(tmp);
return true;}
case value::DOUBLE:{
double tmp = aThis.u.m_int + aV.u.m_double;
aThis.set(tmp);
return true;}
case value::ARRAY_DOUBLE:{
int tmp = aThis.u.m_int;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->add(double(tmp));
return true;}
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::UNSIGNED_INT:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::FLOAT:
switch(aV.m_type) {
case value::UNSIGNED_SHORT :
aThis.u.m_float += aV.u.m_unsigned_short;
return true;
case value::UNSIGNED_INT:
aThis.u.m_float += aV.u.m_unsigned_int;
return true;
case value::SHORT:
aThis.u.m_float += aV.u.m_short;
return true;
case value::INT:
aThis.u.m_float += aV.u.m_int;
return true;
case value::FLOAT:
aThis.u.m_float += aV.u.m_float;
return true;
case value::DOUBLE:
aThis.u.m_float += (float)aV.u.m_double;
return true;
case value::ARRAY_DOUBLE:{
double tmp = aThis.u.m_float;
//In the below this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->add(tmp);
return true;}
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::BOOL:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::DOUBLE:
switch(aV.m_type) {
case value::SHORT:
aThis.u.m_double += aV.u.m_short;
return true;
case value::INT:
aThis.u.m_double += aV.u.m_int;
return true;
case value::FLOAT:
aThis.u.m_double += aV.u.m_float;
return true;
case value::DOUBLE:
aThis.u.m_double += aV.u.m_double;
return true;
case value::UNSIGNED_SHORT :
aThis.u.m_double += aV.u.m_unsigned_short;
return true;
case value::UNSIGNED_INT:
aThis.u.m_double += aV.u.m_unsigned_int;
return true;
case value::ARRAY_DOUBLE:{
double tmp = aThis.u.m_double;
//In the below this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->add(tmp);
return true;}
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::BOOL:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::UNSIGNED_INT:
switch(aV.m_type) {
case value::UNSIGNED_INT:
aThis.u.m_unsigned_int += aV.u.m_unsigned_int;
return true;
case value::INT:{
int tmp = aThis.u.m_unsigned_int + aV.u.m_int;
aThis.set(tmp);
return true;}
case value::FLOAT:{
float tmp = float(aThis.u.m_unsigned_int) + aV.u.m_float;
aThis.set(tmp);
return true;}
case value::DOUBLE:{
double tmp = double(aThis.u.m_unsigned_int) + aV.u.m_double;
aThis.set(tmp);
return true;}
case value::ARRAY_DOUBLE:{
unsigned int tmp = aThis.u.m_unsigned_int;
//In the below this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->add(double(tmp));
return true;}
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::STRING:
switch(aV.m_type) {
case value::STRING:
aThis.set((*aThis.u.m_string)+(*aV.u.m_string));
return true;
case value::NONE:
case value::INT:
case value::DOUBLE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::ARRAY_DOUBLE:
switch(aV.m_type) {
case value::INT:
aThis.u.m_array_double->add(aV.u.m_int);
return true;
case value::UNSIGNED_INT:
aThis.u.m_array_double->add(aV.u.m_unsigned_int);
return true;
case value::DOUBLE:
aThis.u.m_array_double->add(aV.u.m_double);
return true;
case value::ARRAY_DOUBLE:
if(aThis.u.m_array_double->orders()!=aV.u.m_array_double->orders()) {
aError = "Value::add : vector orders mismatch.";
aThis.set_none();
return false;
}
aThis.u.m_array_double->add(*aV.u.m_array_double);
return true;
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("Value::add :" )
+ " can't apply on type " + value::stype(oType)
+ " and type " + aV.stype();
aThis.set_none();
return false;
}
inline bool value::subtract(value& aThis,const value& aV,std::string& aError){
value::e_type oType = aThis.m_type;
switch(aThis.m_type) {
case value::INT:
switch(aV.m_type) {
case value::INT:
aThis.u.m_int -= aV.u.m_int;
return true;
case value::DOUBLE:{
double tmp = aThis.u.m_int - aV.u.m_double;
aThis.set(tmp);
return true;}
case value::FLOAT:{
float tmp = aThis.u.m_int - aV.u.m_float;
aThis.set(tmp);
return true;}
case value::ARRAY_DOUBLE:{
int tmp = aThis.u.m_int;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->multiply(-1);
aThis.u.m_array_double->add(double(tmp));
return true;}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::FLOAT:
switch(aV.m_type) {
case value::DOUBLE:
aThis.u.m_float -= (float)aV.u.m_double;
return true;
case value::UNSIGNED_SHORT :
aThis.u.m_float -= aV.u.m_unsigned_short;
return true;
case value::UNSIGNED_INT:
aThis.u.m_float -= aV.u.m_unsigned_int;
return true;
case value::ARRAY_DOUBLE:{
double tmp = aThis.u.m_float;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->multiply(-1);
aThis.u.m_array_double->add(tmp);
return true;}
case value::NONE:
case value::INT:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::DOUBLE:
switch(aV.m_type) {
case value::DOUBLE:
aThis.u.m_double -= aV.u.m_double;
return true;
case value::UNSIGNED_SHORT :
aThis.u.m_double -= aV.u.m_unsigned_short;
return true;
case value::UNSIGNED_INT:
aThis.u.m_double -= aV.u.m_unsigned_int;
return true;
case value::ARRAY_DOUBLE:{
double tmp = aThis.u.m_double;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->multiply(-1);
aThis.u.m_array_double->add(tmp);
return true;}
case value::NONE:
case value::INT:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::UNSIGNED_INT:
switch(aV.m_type) {
//uuu
//case value::UNSIGNED_INT:
// aThis.u.m_unsigned_int -= aV.u.m_unsigned_int;
// return true;
case value::ARRAY_DOUBLE:{
unsigned int tmp = aThis.u.m_unsigned_int;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->multiply(-1);
aThis.u.m_array_double->add(double(tmp));
return true;}
case value::DOUBLE:{
double d = double(aThis.u.m_unsigned_int) - aV.u.m_double;
aThis.set(d); //this becomes a value::DOUBLE.
return true;}
case value::NONE:
case value::INT:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::ARRAY_DOUBLE:
switch(aV.m_type) {
case value::INT:
aThis.u.m_array_double->add(-aV.u.m_int);
return true;
case value::UNSIGNED_INT:
aThis.u.m_array_double->add(-((double)aV.u.m_unsigned_int));
return true;
case value::DOUBLE:
aThis.u.m_array_double->add(-aV.u.m_double);
return true;
case value::ARRAY_DOUBLE:{
if(aThis.u.m_array_double->orders()!=aV.u.m_array_double->orders()) {
aError = "Value::subtract : vector orders mismatch.";
aThis.set_none();
return false;
}
std::vector<double>& stdv = aThis.u.m_array_double->vector();
const std::vector<double>& stdv2 = aV.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
stdv[index] -= stdv2[index];
}
return true;}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("Value::subtract :" )
+ " can't apply on type " + value::stype(oType)
+ " and type " + aV.stype();
aThis.set_none();
return false;
}
inline bool value::multiply(value& aThis,const value& aV,std::string& aError){
value::e_type oType = aThis.m_type;
switch(aThis.m_type) {
case value::INT:
switch(aV.m_type) {
case value::INT:
aThis.u.m_int *= aV.u.m_int;
return true;
case value::DOUBLE:
aThis.u.m_int *= (int)aV.u.m_double;
return true;
case value::FLOAT:
aThis.u.m_int *= (int)aV.u.m_float;
return true;
case value::ARRAY_DOUBLE:{
int tmp = aThis.u.m_int;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->multiply(double(tmp));
return true;}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::UNSIGNED_INT:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::FLOAT:
switch(aV.m_type) {
case value::SHORT:
aThis.u.m_float *= aV.u.m_short;
return true;
case value::INT:
aThis.u.m_float *= aV.u.m_int;
return true;
case value::FLOAT:
aThis.u.m_float *= aV.u.m_float;
return true;
case value::DOUBLE:
aThis.u.m_float *= (float)aV.u.m_double;
return true;
case value::UNSIGNED_SHORT :
aThis.u.m_float *= aV.u.m_unsigned_short;
return true;
case value::UNSIGNED_INT:
aThis.u.m_float *= aV.u.m_unsigned_int;
return true;
case value::ARRAY_DOUBLE:{
double tmp = aThis.u.m_float;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->multiply(tmp);
return true;}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::DOUBLE:
switch(aV.m_type) {
case value::SHORT:
aThis.u.m_double *= aV.u.m_short;
return true;
case value::INT:
aThis.u.m_double *= aV.u.m_int;
return true;
case value::INT64:
aThis.u.m_double *= aV.u.m_int64;
return true;
case value::FLOAT:
aThis.u.m_double *= aV.u.m_float;
return true;
case value::DOUBLE:
aThis.u.m_double *= aV.u.m_double;
return true;
case value::UNSIGNED_SHORT :
aThis.u.m_double *= aV.u.m_unsigned_short;
return true;
case value::UNSIGNED_INT:
aThis.u.m_double *= aV.u.m_unsigned_int;
return true;
case value::ARRAY_DOUBLE:{
double tmp = aThis.u.m_double;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->multiply(tmp);
return true;}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::UNSIGNED_INT:
switch(aV.m_type) {
case value::FLOAT:{
float tmp = aThis.u.m_unsigned_int * aV.u.m_float;
aThis.set(tmp); //this becomes a value::FLOAT.
return true;}
case value::DOUBLE:{
double tmp = aThis.u.m_unsigned_int * aV.u.m_double;
aThis.set(tmp); //this becomes a value::DOUBLE.
return true;}
case value::INT:{
int tmp = aThis.u.m_unsigned_int * aV.u.m_int;
aThis.set(tmp); //this becomes a value::INT.
return true;}
case value::INT64:{
int64 tmp = aThis.u.m_unsigned_int * aV.u.m_int64;
aThis.set(tmp); //this becomes a value::INT64.
return true;}
case value::UNSIGNED_INT:
aThis.u.m_unsigned_int *= aV.u.m_unsigned_int;
return true;
case value::ARRAY_DOUBLE:{
unsigned int tmp = aThis.u.m_unsigned_int;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
aThis.u.m_array_double->multiply(double(tmp));
return true;}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::ARRAY_DOUBLE:
switch(aV.m_type) {
case value::INT:
aThis.u.m_array_double->multiply(aV.u.m_int);
return true;
case value::UNSIGNED_INT:
aThis.u.m_array_double->multiply(aV.u.m_unsigned_int);
return true;
case value::DOUBLE:
aThis.u.m_array_double->multiply(aV.u.m_double);
return true;
case value::ARRAY_DOUBLE:{
if(aThis.u.m_array_double->orders()!=aV.u.m_array_double->orders()) {
aError = "Value::multiply : vector orders mismatch.";
aThis.set_none();
return false;
}
std::vector<double>& stdv = aThis.u.m_array_double->vector();
const std::vector<double>& stdv2 = aV.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
stdv[index] *= stdv2[index];
}
return true;}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("Value::multiply :" )
+ " can't apply on type " + value::stype(oType)
+ " and type " + aV.stype();
aThis.set_none();
return false;
}
inline bool value::divide(value& aThis,const value& aV,std::string& aError){
value::e_type oType = aThis.m_type;
switch(aThis.m_type) {
case value::INT:
switch(aV.m_type) {
case value::FLOAT:
if(aV.u.m_float==0.0F) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
float tmp = float(aThis.u.m_int)/aV.u.m_float;
aThis.set(tmp);
return true;
}
case value::DOUBLE:
if(aV.u.m_double==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
double tmp = double(aThis.u.m_int)/aV.u.m_double;
aThis.set(tmp);
return true;
}
case value::ARRAY_DOUBLE:{
int tmp = aThis.u.m_int;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
if(!aThis.u.m_array_double->invert()) {
aError = value::error_div_zero();
aThis.set_none();
return false;
}
aThis.u.m_array_double->multiply((double)tmp);
return true;}
case value::NONE:
case value::INT:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::FLOAT:
switch(aV.m_type) {
case value::INT:
if(aV.u.m_int==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
aThis.u.m_float /= aV.u.m_int;
return true;
}
case value::FLOAT:
if(aV.u.m_float==0.0F) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
aThis.u.m_float /= aV.u.m_float;
return true;
}
case value::DOUBLE:
if(aV.u.m_float==0.0F) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
aThis.u.m_float /= (float)aV.u.m_double;
return true;
}
case value::UNSIGNED_INT:
if(aV.u.m_unsigned_int==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
aThis.u.m_float /= aV.u.m_unsigned_int;
return true;
}
case value::ARRAY_DOUBLE:{
double tmp = aThis.u.m_float;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
if(!aThis.u.m_array_double->invert()) {
aError = value::error_div_zero();
aThis.set_none();
return false;
}
aThis.u.m_array_double->multiply(tmp);
return true;}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::DOUBLE:
switch(aV.m_type) {
case value::SHORT:
if(aV.u.m_short==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
aThis.u.m_double /= aV.u.m_short;
return true;
}
case value::INT:
if(aV.u.m_int==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
aThis.u.m_double /= aV.u.m_int;
return true;
}
case value::FLOAT:
if(aV.u.m_float==0.0F) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
aThis.u.m_double /= aV.u.m_float;
return true;
}
case value::DOUBLE:
if(aV.u.m_double==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
aThis.u.m_double /= aV.u.m_double;
return true;
}
case value::UNSIGNED_INT:
if(aV.u.m_unsigned_int==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
aThis.u.m_double /= aV.u.m_unsigned_int;
return true;
}
case value::ARRAY_DOUBLE:{
double tmp = aThis.u.m_double;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
if(!aThis.u.m_array_double->invert()) {
aError = value::error_div_zero();
aThis.set_none();
return false;
}
aThis.u.m_array_double->multiply(tmp);
return true;}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::UNSIGNED_INT:
switch(aV.m_type) {
//case value::UNSIGNED_INT:
// if(aV.u.m_unsigned_int==0) {
// aError = value::error_div_zero();
// aThis.set_none();
// return false;
// } else {
// //FIXME : ???
// aThis.set((double)(aThis.u.m_unsigned_int / aV.u.m_unsigned_int ));
// return true;
// }
case value::ARRAY_DOUBLE:{
unsigned int tmp = aThis.u.m_unsigned_int;
//In the below, this becomes a value::ARRAY_DOUBLE.
aThis.set(aV.u.m_array_double->orders(),
aV.u.m_array_double->vector());
if(!aThis.u.m_array_double->invert()) {
aError = value::error_div_zero();
aThis.set_none();
return false;
}
aThis.u.m_array_double->multiply(double(tmp));
return true;}
case value::FLOAT:
if(aV.u.m_float==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
float d = float(aThis.u.m_unsigned_int)/aV.u.m_float;
aThis.set(d); //this becomes a value::FLOAT.
return true;
}
case value::DOUBLE:
if(aV.u.m_double==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
double d = double(aThis.u.m_unsigned_int)/aV.u.m_double;
aThis.set(d); //this becomes a value::DOUBLE.
return true;
}
case value::NONE:
case value::INT:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::ARRAY_DOUBLE:
switch(aV.m_type) {
case value::INT:
if(aV.u.m_int==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
double value = 1./aV.u.m_int;
aThis.u.m_array_double->multiply(value);
return true;
}
case value::UNSIGNED_INT:
if(aV.u.m_unsigned_int==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
double value = 1./aV.u.m_unsigned_int;
aThis.u.m_array_double->multiply(value);
return true;
}
case value::DOUBLE:
if(aV.u.m_double==0) {
aError = value::error_div_zero();
aThis.set_none();
return false;
} else {
aThis.u.m_array_double->multiply(1./aV.u.m_double);
return true;
}
case value::ARRAY_DOUBLE:{
if(aThis.u.m_array_double->orders()!=aV.u.m_array_double->orders()) {
aError = value::error_div_zero(); //FIXME : error_mismatch_orders
aThis.set_none();
return false;
}
std::vector<double>& stdv = aThis.u.m_array_double->vector();
const std::vector<double>& stdv2 = aV.u.m_array_double->vector();
bool has_div_zero = false;
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv2[index]==0) {
//FIXME : stdv[index] = nan;
stdv[index] = 0; //PAW convention.
has_div_zero = true;
} else {
stdv[index] /= stdv2[index];
}
}
if(has_div_zero) {
aError = value::error_div_zero();
// For OpenPAW/pasigm::SIGMA, continue anyway in case of /0 errors.
//aThis.set_none();
//return false; //FIXME : is so, then it will stop Processor.
return true; //FIXME : do we want that ?
}
return true;}
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::INT64:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::INT64:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("Value::divide :")
+ " can't apply on type " + value::stype(oType)
+ " and type " + aV.stype();
aThis.set_none();
return false;
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
inline bool value::if_gt(value& aThis,const value& aV,std::string& aError){
value::e_type oType = aThis.m_type;
switch(aThis.m_type) {
case value::INT:
switch(aV.m_type) {
case value::INT:
aThis.set((bool)(aThis.u.m_int>aV.u.m_int?true:false));
return true;
case value::FLOAT:
aThis.set((bool)(aThis.u.m_int>aV.u.m_float?true:false));
return true;
case value::DOUBLE:
aThis.set((bool)(aThis.u.m_int>aV.u.m_double?true:false));
return true;
case value::UNSIGNED_SHORT :
aThis.set((bool)(aThis.u.m_int>(int)aV.u.m_unsigned_short?true:false));
return true;
case value::UNSIGNED_INT:
aThis.set((bool)(aThis.u.m_int>(int)aV.u.m_unsigned_int?true:false));
return true;
case value::ARRAY_DOUBLE:{
const std::vector<double>& stdv = aV.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(aThis.u.m_int<=stdv[index]) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::DOUBLE:
switch(aV.m_type) {
case value::DOUBLE:
aThis.set((bool)(aThis.u.m_double>aV.u.m_double?true:false));
return true;
case value::FLOAT:
aThis.set((bool)(aThis.u.m_double>aV.u.m_float?true:false));
return true;
case value::INT:
aThis.set((bool)(aThis.u.m_double>aV.u.m_int?true:false));
return true;
case value::UNSIGNED_SHORT :
aThis.set((bool)(aThis.u.m_double>aV.u.m_unsigned_short?true:false));
return true;
case value::UNSIGNED_INT:
aThis.set((bool)(aThis.u.m_double>aV.u.m_unsigned_int?true:false));
return true;
case value::ARRAY_DOUBLE:{
const std::vector<double>& stdv = aV.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(aThis.u.m_double<=stdv[index]) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::FLOAT:
switch(aV.m_type) {
case value::DOUBLE:
aThis.set((bool)(aThis.u.m_float>aV.u.m_double?true:false));
return true;
case value::FLOAT:
aThis.set((bool)(aThis.u.m_float>aV.u.m_float?true:false));
return true;
case value::INT:
aThis.set((bool)(aThis.u.m_float>aV.u.m_int?true:false));
return true;
case value::UNSIGNED_SHORT :
aThis.set((bool)(aThis.u.m_float>aV.u.m_unsigned_short?true:false));
return true;
case value::UNSIGNED_INT:
aThis.set((bool)(aThis.u.m_float>aV.u.m_unsigned_int?true:false));
return true;
case value::ARRAY_DOUBLE:{
const std::vector<double>& stdv = aV.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(aThis.u.m_float<=stdv[index]) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::VOID_STAR:
switch(aV.m_type) {
case value::VOID_STAR:
aThis.set((bool)(aThis.u.m_void_star>aV.u.m_void_star?true:false));
return true;
case value::NONE:
case value::INT:
case value::DOUBLE:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::UNSIGNED_INT:
switch(aV.m_type) {
case value::UNSIGNED_INT:
aThis.set((bool)(aThis.u.m_unsigned_int >aV.u.m_unsigned_int ?true:false));
return true;
case value::INT:
aThis.set((bool)((int)aThis.u.m_unsigned_int >aV.u.m_int?true:false));
return true;
case value::NONE:
case value::VOID_STAR:
case value::DOUBLE:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::ARRAY_DOUBLE:
switch(aV.m_type) {
case value::INT:{
const std::vector<double>& stdv = aThis.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv[index]<=aV.u.m_int) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::FLOAT:{
const std::vector<double>& stdv = aThis.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv[index]<=aV.u.m_float) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::DOUBLE:{
const std::vector<double>& stdv = aThis.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv[index]<=aV.u.m_double) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::UNSIGNED_INT:{
const std::vector<double>& stdv = aThis.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv[index]<=aV.u.m_unsigned_int ) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::ARRAY_DOUBLE:{
const std::vector<double>& stdv = aThis.u.m_array_double->vector();
const std::vector<double>& stdv2 = aV.u.m_array_double->vector();
if(stdv.size()!=stdv2.size()) break;
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv[index]<=stdv2[index]) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::NONE:
case value::BOOL:
case value::SHORT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::STRING:
case value::INT64:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("Value::if_gt() :")
+ " can't compare type " + value::stype(oType)
+ " with type " + aV.stype();
aThis.set_none();
return false;
}
inline bool value::if_eq(value& aThis,const value& aV,std::string& aError){
value::e_type oType = aThis.m_type;
switch(aThis.m_type) {
case value::INT:
switch(aV.m_type) {
case value::INT:
aThis.set((bool)(aThis.u.m_int==aV.u.m_int?true:false));
return true;
case value::DOUBLE:
aThis.set((bool)(aThis.u.m_int==aV.u.m_double?true:false));
return true;
case value::FLOAT:
aThis.set((bool)(aThis.u.m_int==aV.u.m_float?true:false));
return true;
case value::UNSIGNED_SHORT :
aThis.set((bool)(aThis.u.m_int==(int)aV.u.m_unsigned_short?true:false));
return true;
case value::UNSIGNED_INT:
aThis.set((bool)(aThis.u.m_int==(int)aV.u.m_unsigned_int ?true:false));
return true;
case value::ARRAY_DOUBLE:{
const std::vector<double>& stdv = aV.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(aThis.u.m_int!=stdv[index]) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::FLOAT:
switch(aV.m_type) {
case value::FLOAT:
aThis.set((bool)(aThis.u.m_float==aV.u.m_float?true:false));
return true;
case value::DOUBLE:
aThis.set((bool)(aThis.u.m_float==aV.u.m_double?true:false));
return true;
case value::INT:
aThis.set((bool)(aThis.u.m_float==aV.u.m_int?true:false));
return true;
case value::UNSIGNED_SHORT :
aThis.set((bool)(aThis.u.m_float==aV.u.m_unsigned_short?true:false));
return true;
case value::UNSIGNED_INT:
aThis.set((bool)(aThis.u.m_float==aV.u.m_unsigned_int?true:false));
return true;
case value::ARRAY_DOUBLE:{
const std::vector<double>& stdv = aV.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(aThis.u.m_float!=stdv[index]) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::INT64:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::DOUBLE:
switch(aV.m_type) {
case value::DOUBLE:
aThis.set((bool)(aThis.u.m_double==aV.u.m_double?true:false));
return true;
case value::FLOAT:
aThis.set((bool)(aThis.u.m_double==aV.u.m_float?true:false));
return true;
case value::INT:
aThis.set((bool)(aThis.u.m_double==aV.u.m_int?true:false));
return true;
case value::UNSIGNED_SHORT :
aThis.set((bool)(aThis.u.m_double==aV.u.m_unsigned_short?true:false));
return true;
case value::UNSIGNED_INT:
aThis.set((bool)(aThis.u.m_double==aV.u.m_unsigned_int ?true:false));
return true;
case value::ARRAY_DOUBLE:{
const std::vector<double>& stdv = aV.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(aThis.u.m_double!=stdv[index]) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::INT64:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::STRING:
switch(aV.m_type) {
case value::STRING:
aThis.set((bool)((*aThis.u.m_string)==(*aV.u.m_string)?true:false));
return true;
case value::INT:
{int v;
if(!tools::to<int>(*aThis.u.m_string,v)) break;
aThis.set((bool)(v==aV.u.m_int?true:false));
return true;}
case value::FLOAT:
{float v;
if(!tools::to<float>(*aThis.u.m_string,v)) break;
aThis.set((bool)(v==aV.u.m_float?true:false));
return true;}
case value::DOUBLE:
{double v;
if(!tools::to<double>(*aThis.u.m_string,v)) break;
aThis.set((bool)(v==aV.u.m_double?true:false));
return true;}
case value::UNSIGNED_INT:
{typedef unsigned int uint_t;
uint_t v;
if(!tools::to<uint_t>(*aThis.u.m_string,v)) break;
aThis.set((bool)(v==aV.u.m_unsigned_int ?true:false));
return true;}
case value::BOOL:
{bool v;
if(!tools::to(*aThis.u.m_string,v)) break;
aThis.set((bool)(v==aV.u.m_bool?true:false));
return true;}
case value::NONE:
case value::VOID_STAR:
case value::SHORT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::INT64:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::VOID_STAR:
switch(aV.m_type) {
case value::VOID_STAR:
aThis.set((bool)(aThis.u.m_void_star==aV.u.m_void_star?true:false));
return true;
case value::NONE:
case value::INT:
case value::DOUBLE:
case value::BOOL:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::UNSIGNED_INT:
switch(aV.m_type) {
case value::UNSIGNED_INT:
aThis.set((bool)(aThis.u.m_unsigned_int ==aV.u.m_unsigned_int ?true:false));
return true;
case value::INT:
aThis.set((bool)((int)aThis.u.m_unsigned_int ==aV.u.m_int?true:false));
return true;
case value::FLOAT:
aThis.set((bool)((int)aThis.u.m_unsigned_int ==aV.u.m_float?true:false));
return true;
case value::DOUBLE:
aThis.set((bool)((int)aThis.u.m_unsigned_int ==aV.u.m_double?true:false));
return true;
case value::ARRAY_DOUBLE:{
const std::vector<double>& stdv = aV.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(aThis.u.m_unsigned_int !=stdv[index]) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::NONE:
case value::BOOL:
case value::VOID_STAR:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::BOOL:
switch(aV.m_type) {
case value::BOOL:
aThis.u.m_bool = ((aThis.u.m_bool==aV.u.m_bool)?true:false);
return true;
case value::NONE:
case value::INT:
case value::DOUBLE:
case value::VOID_STAR:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::ARRAY_DOUBLE:
switch(aV.m_type) {
case value::INT:{
const std::vector<double>& stdv = aThis.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv[index]!=aV.u.m_int) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::FLOAT:{
const std::vector<double>& stdv = aThis.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv[index]!=aV.u.m_float) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::DOUBLE:{
const std::vector<double>& stdv = aThis.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv[index]!=aV.u.m_double) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::UNSIGNED_INT:{
const std::vector<double>& stdv = aThis.u.m_array_double->vector();
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv[index]!=aV.u.m_unsigned_int ) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::ARRAY_DOUBLE:{
const std::vector<double>& stdv = aThis.u.m_array_double->vector();
const std::vector<double>& stdv2 = aV.u.m_array_double->vector();
if(stdv.size()!=stdv2.size()) {
aThis.set(false);
return true;
}
size_t number = stdv.size();
for(size_t index=0;index<number;index++) {
if(stdv[index]!=stdv2[index]) {
aThis.set(false);
return true;
}
}
aThis.set(true);
return true;
}
case value::NONE:
case value::VOID_STAR:
case value::BOOL:
case value::SHORT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::STRING:
case value::INT64:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::NONE:
case value::SHORT:
case value::INT64:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
//case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("Value::if_eq() :")
+ " can't compare type " + value::stype(oType)
+ " with type " + aV.stype();
aThis.set_none();
return false;
}
inline bool value::if_and(value& aThis,const value& aV,std::string& aError){
value::e_type oType = aThis.m_type;
switch(aThis.m_type) {
case value::BOOL:
switch(aV.m_type) {
case value::BOOL:
aThis.u.m_bool = ((aThis.u.m_bool && aV.u.m_bool)?true:false);
return true;
case value::INT:
case value::NONE:
case value::DOUBLE:
case value::STRING:
case value::VOID_STAR:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::UNSIGNED_INT:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::NONE:
case value::INT:
case value::DOUBLE:
case value::VOID_STAR:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("Value::if_and :")
+ " can't apply on type " + value::stype(oType)
+ " and type " + aV.stype();
aThis.set_none();
return false;
}
inline bool value::if_or(value& aThis,const value& aV,std::string& aError){
value::e_type oType = aThis.m_type;
switch(aThis.m_type) {
case value::BOOL:
switch(aV.m_type) {
case value::BOOL:
aThis.u.m_bool = ((aThis.u.m_bool || aV.u.m_bool)?true:false);
return true;
case value::INT:
case value::NONE:
case value::DOUBLE:
case value::STRING:
case value::VOID_STAR:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::UNSIGNED_INT:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
break;
case value::NONE:
case value::INT:
case value::DOUBLE:
case value::VOID_STAR:
case value::SHORT:
case value::INT64:
case value::FLOAT:
//case value::UNSIGNED_CHAR:
//case value::CHAR:
case value::UNSIGNED_SHORT :
case value::UNSIGNED_INT:
case value::UNSIGNED_INT64 :
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
case value::STRING:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aError = std::string("Value::if_or :")
+ " can't apply on type " + value::stype(oType)
+ " and type " + aV.stype();
aThis.set_none();
return false;
}
inline bool value::to_double(const value& aThis,double& aValue){
switch(aThis.m_type) {
case value::INT:
aValue = aThis.u.m_int;
return true;
case value::DOUBLE:
aValue = aThis.u.m_double;
return true;
case value::UNSIGNED_SHORT:
aValue = aThis.u.m_unsigned_short;
return true;
case value::UNSIGNED_INT:
aValue = aThis.u.m_unsigned_int;
return true;
case value::SHORT:
aValue = aThis.u.m_short;
return true;
case value::INT64:
aValue = (double)aThis.u.m_int64;
return true;
case value::UNSIGNED_INT64:
aValue = (double)aThis.u.m_unsigned_int64;
return true;
case value::FLOAT:
aValue = aThis.u.m_float;
return true;
//case value::UNSIGNED_CHAR:
// aValue = aThis.u.m_unsigned_char;
// return true;
//case value::CHAR:
// aValue = aThis.u.m_char;
// return true;
case value::BOOL:
aValue = aThis.u.m_bool?1:0;
return true;
case value::NONE:
case value::STRING:
case value::VOID_STAR:
case value::DOUBLE_STAR:
case value::FLOAT_STAR:
case value::INT_STAR:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
break;
}
aValue = 0;
return false;
}
inline bool value::cxx_type(const value& aThis,std::string& aValue){
switch(aThis.m_type) {
case value::INT:
aValue = "int";
return true;
case value::DOUBLE:
aValue = "double";
return true;
case value::STRING:
aValue = "std::string";
return true;
case value::BOOL:
aValue = "bool";
return true;
case value::SHORT:
aValue = "short";
return true;
case value::FLOAT:
aValue = "float";
return true;
//case value::CHAR:
// aValue = "char";
// return true;
//case value::UNSIGNED_CHAR:
// aValue = "unsigned char";
// return true;
case value::UNSIGNED_SHORT:
aValue = "unsigned short";
return true;
case value::UNSIGNED_INT:
aValue = "unsigned int";
return true;
case value::VOID_STAR:
aValue = "void*";
return true;
case value::DOUBLE_STAR:
aValue = "double*";
return true;
case value::FLOAT_STAR:
aValue = "float*";
return true;
case value::INT_STAR:
aValue = "int*";
return true;
case value::NONE:
case value::INT64:
case value::UNSIGNED_INT64:
//case value::ARRAY_UNSIGNED_CHAR:
//case value::ARRAY_CHAR:
case value::ARRAY_UNSIGNED_SHORT:
case value::ARRAY_SHORT:
case value::ARRAY_UNSIGNED_INT:
case value::ARRAY_INT:
case value::ARRAY_UNSIGNED_INT64:
case value::ARRAY_INT64:
case value::ARRAY_FLOAT:
case value::ARRAY_DOUBLE:
case value::ARRAY_BOOL:
case value::ARRAY_STRING:
aValue = "";
return false;
}
return false;
}
/*
inline bool value::i_set(value& aThis,const Slash::Core::IValue& aValue){
aThis.reset();
aThis.m_type = aValue.type();
switch(aValue.type()) {
case value::NONE:
aThis.u.m_unsigned_int64 = 0;
return true;
case value::CHAR:
aThis.u.m_char = aValue.get_char();
return true;
case value::SHORT:
aThis.u.m_short = aValue.get_short();
return true;
case value::INT:
aThis.u.m_int = aValue.get_int();
return true;
case value::INT64:
aThis.u.m_int64 = aValue.get_int64();
return true;
case value::UNSIGNED_INT64:
aThis.u.m_unsigned_int64 = aValue.get_unsigned_int64();
return true;
//case value::UNSIGNED_CHAR:
// aThis.u.m_unsigned_char = aValue.get_unsigned_char();
// return true;
case value::UNSIGNED_SHORT:
aThis.u.m_unsigned_short = aValue.get_unsigned_short();
return true;
case value::UNSIGNED_INT:
aThis.u.m_unsigned_int = aValue.get_unsigned_int();
return true;
case value::DOUBLE_STAR:
aThis.u.m_double_star = aValue.get_double_star();
return true;
case value::FLOAT_STAR:
aThis.u.m_float_star = aValue.get_float_star();
return true;
case value::INT_STAR:
aThis.u.m_int_star = aValue.get_int_star();
return true;
case value::FLOAT:
aThis.u.m_float = aValue.get_float();
return true;
case value::DOUBLE:
aThis.u.m_double = aValue.get_double();
return true;
case value::VOID_STAR:
aThis.u.m_void_star = aValue.get_void_star();
return true;
case value::BOOL:
aThis.u.m_bool = aValue.get_bool();
return true;
case value::STRING:
aThis.u.m_string = new std::string(aValue.get_string());
return true;
case value::ARRAY_UNSIGNED_CHAR:
{std::vector<unsigned int> is;
const std::vector<unsigned char>& vd = aValue.get_array_unsigned_char(is);
aThis.u.m_array_unsigned_char = new tools::array<unsigned char>();
if(!aThis.u.m_array_unsigned_char->configure(is)){
aThis.set_none();return false;
}
if(!aThis.u.m_array_unsigned_char->fill(vd)){aThis.set_none();return false;}
return true;}
case value::ARRAY_CHAR:
{std::vector<unsigned int> is;
const std::vector<char>& vd = aValue.get_array_char(is);
aThis.u.m_array_char = new tools::array<char>();
if(!aThis.u.m_array_char->configure(is)){
aThis.set_none();return false;
}
if(!aThis.u.m_array_char->fill(vd)){aThis.set_none();return false;}
return true;}
case value::ARRAY_UNSIGNED_SHORT:
{std::vector<unsigned int> is;
const std::vector<unsigned short>& vd =
aValue.get_array_unsigned_short(is);
aThis.u.m_array_unsigned_short = new tools::array<unsigned short>();
if(!aThis.u.m_array_unsigned_short->configure(is)){
aThis.set_none();return false;
}
if(!aThis.u.m_array_unsigned_short->fill(vd)){
aThis.set_none();return false;
}
return true;}
case value::ARRAY_SHORT:
{std::vector<unsigned int> is;
const std::vector<short>& vd = aValue.get_array_short(is);
aThis.u.m_array_short = new tools::array<short>();
if(!aThis.u.m_array_short->configure(is)){aThis.set_none();return false;}
if(!aThis.u.m_array_short->fill(vd)){aThis.set_none();return false;}
return true;}
case value::ARRAY_UNSIGNED_INT:
{std::vector<unsigned int> is;
const std::vector<unsigned int>& vd = aValue.get_array_unsigned_int(is);
aThis.u.m_array_unsigned_int = new tools::array<unsigned int>();
if(!aThis.u.m_array_unsigned_int->configure(is)){
aThis.set_none();return false;
}
if(!aThis.u.m_array_unsigned_int->fill(vd)){
aThis.set_none();return false;
}
return true;}
case value::ARRAY_INT:
{std::vector<unsigned int> is;
const std::vector<int>& vd = aValue.get_array_int(is);
aThis.u.m_array_int = new tools::array<int>();
if(!aThis.u.m_array_int->configure(is)){aThis.set_none();return false;}
if(!aThis.u.m_array_int->fill(vd)){aThis.set_none();return false;}
return true;}
case value::ARRAY_UNSIGNED_INT64:
{std::vector<unsigned int> is;
const std::vector<uint64>& vd = aValue.get_array_unsigned_int64(is);
aThis.u.m_array_unsigned_int64 = new tools::array<uint64>();
if(!aThis.u.m_array_unsigned_int64->configure(is)){
aThis.set_none();return false;
}
if(!aThis.u.m_array_unsigned_int64->fill(vd)){
aThis.set_none();return false;
}
return true;}
case value::ARRAY_INT64:
{std::vector<unsigned int> is;
const std::vector<int64>& vd = aValue.get_array_int64(is);
aThis.u.m_array_int64 = new tools::array<int64>();
if(!aThis.u.m_array_int64->configure(is)){aThis.set_none();return false;}
if(!aThis.u.m_array_int64->fill(vd)){aThis.set_none();return false;}
return true;}
case value::ARRAY_FLOAT:
{std::vector<unsigned int> is;
const std::vector<float>& vd = aValue.get_array_float(is);
aThis.u.m_array_float = new tools::array<float>();
if(!aThis.u.m_array_float->configure(is)){aThis.set_none();return false;}
if(!aThis.u.m_array_float->fill(vd)){aThis.set_none();return false;}
return true;}
case value::ARRAY_DOUBLE:
{std::vector<unsigned int> is;
const std::vector<double>& vd = aValue.get_array_double(is);
aThis.u.m_array_double = new tools::array<double>();
if(!aThis.u.m_array_double->configure(is)){aThis.set_none();return false;}
if(!aThis.u.m_array_double->fill(vd)){aThis.set_none();return false;}
return true;}
case value::ARRAY_BOOL:
{std::vector<unsigned int> is;
const std::vector<bool>& vd = aValue.get_array_bool(is);
aThis.u.m_array_bool = new tools::array<bool>();
if(!aThis.u.m_array_bool->configure(is)){aThis.set_none();return false;}
if(!aThis.u.m_array_bool->fill(vd)){aThis.set_none();return false;}
return true;}
case value::ARRAY_STRING:
{std::vector<unsigned int> is;
const std::vector<std::string>& vd = aValue.get_array_string(is);
aThis.u.m_array_string = new tools::array<std::string>();
if(!aThis.u.m_array_string->configure(is)){aThis.set_none();return false;}
if(!aThis.u.m_array_string->fill(vd)){aThis.set_none();return false;}
return true;}
}
aThis.set_none();
return false;
}
*/
inline std::string value::to_string(const value& aThis){
std::string s;
switch(aThis.m_type) {
case value::NONE:
tools::sprintf(s,5,"(nil)");
return s;
case value::INT:
tools::sprintf(s,16,"%d",aThis.u.m_int);
return s;
case value::DOUBLE:
tools::sprintf(s,16,"%g",aThis.u.m_double);
return s;
case value::VOID_STAR:
tools::sprintf(s,32,upointer_format_x(),(upointer)aThis.u.m_void_star);
return s;
case value::UNSIGNED_SHORT:
tools::sprintf(s,16,"%u",aThis.u.m_unsigned_short);
return s;
case value::UNSIGNED_INT:
tools::sprintf(s,16,"%u",aThis.u.m_unsigned_int);
return s;
case value::BOOL:
tools::sprintf(s,5,"%s",aThis.u.m_bool?"true":"false");
return s;
case value::SHORT:
tools::sprintf(s,16,"%d",aThis.u.m_short);
return s;
case value::INT64:{
tools::sprintf(s,16,tools::int64_format(),aThis.u.m_int64);
}return s;
case value::UNSIGNED_INT64:{
tools::sprintf(s,16,tools::int64_format(),aThis.u.m_unsigned_int64);
}return s;
case value::FLOAT:
tools::sprintf(s,16,"%g",aThis.u.m_float);
return s;
//case value::UNSIGNED_CHAR:
// tools::sprintf(s,16,"%c",aThis.u.m_unsigned_char);
// return s;
//case value::CHAR:
// tools::sprintf(s,16,"%c",aThis.u.m_char);
// return s;
case value::DOUBLE_STAR:
tools::sprintf(s,32,upointer_format_x(),(upointer)aThis.u.m_double_star);
return s;
case value::FLOAT_STAR:
tools::sprintf(s,32,upointer_format_x(),(upointer)aThis.u.m_float_star);
return s;
case value::INT_STAR:
tools::sprintf(s,32,upointer_format_x(),(upointer)aThis.u.m_int_star);
return s;
case value::STRING:
return *aThis.u.m_string;
//case value::ARRAY_UNSIGNED_CHAR:
// return tools::tos<unsigned char>(aThis.u.m_array_unsigned_char->vector());
//case value::ARRAY_CHAR:
// return tools::tos<char>(aThis.u.m_array_char->vector());
case value::ARRAY_UNSIGNED_SHORT:
if(!tools::nums2s<unsigned short>(aThis.u.m_array_unsigned_short->vector(),s)) {}
return s;
case value::ARRAY_SHORT:
if(!tools::nums2s<short>(aThis.u.m_array_short->vector(),s)) {}
return s;
case value::ARRAY_UNSIGNED_INT:
if(!tools::nums2s<unsigned int>(aThis.u.m_array_unsigned_int->vector(),s)) {}
return s;
case value::ARRAY_INT:
if(!tools::nums2s<int>(aThis.u.m_array_int->vector(),s)) {}
return s;
case value::ARRAY_UNSIGNED_INT64:
if(!tools::nums2s<uint64>(aThis.u.m_array_unsigned_int64->vector(),s)) {}
return s;
case value::ARRAY_INT64:
if(!tools::nums2s<int64>(aThis.u.m_array_int64->vector(),s)) {}
return s;
case value::ARRAY_FLOAT:
if(!tools::nums2s<float>(aThis.u.m_array_float->vector(),s)) {}
return s;
case value::ARRAY_DOUBLE:
if(!tools::nums2s<double>(aThis.u.m_array_double->vector(),s)) {}
return s;
case value::ARRAY_BOOL:
tools::b2s(aThis.u.m_array_bool->vector(),s);
return s;
case value::ARRAY_STRING:
if(!tools::nums2s<std::string>(aThis.u.m_array_string->vector(),s)) {}
return s;
default:
return "unknow"; //it should not happen.
}
}
}