Import Geant4 11.4.0 source tree

This commit is contained in:
Gabriele Cosmo
2025-12-05 08:54:02 +01:00
parent a499fb82e9
commit b4a16de652
6484 changed files with 232674 additions and 221097 deletions
+21 -518
View File
@@ -9,10 +9,6 @@
#include "num2s"
#include "b2s"
#ifdef TOOLS_MEM
#include "mem"
#endif
namespace tools {
class value {
@@ -23,9 +19,6 @@ class value {
public:
enum e_type {
NONE = 0,
// integers :
//UNSIGNED_CHAR = 10,
//CHAR = 11,
UNSIGNED_SHORT = 12,
SHORT = 13,
UNSIGNED_INT = 14,
@@ -45,8 +38,6 @@ public:
INT_STAR = 103,
// multidimensional vectors (1000+base type) :
//ARRAY_UNSIGNED_CHAR = 1010,
//ARRAY_CHAR = 1011,
ARRAY_UNSIGNED_SHORT = 1012,
ARRAY_SHORT = 1013,
ARRAY_UNSIGNED_INT = 1014,
@@ -59,176 +50,84 @@ public:
ARRAY_STRING = 1051
};
/*
static e_type type(unsigned short) {return UNSIGNED_SHORT;}
static e_type type(short) {return SHORT;}
static e_type type(unsigned int) {return UNSIGNED_INT;}
static e_type type(int) {return INT;}
static e_type type(uint64) {return UNSIGNED_INT64;}
static e_type type(int64) {return INT64;}
static e_type type(float) {return FLOAT;}
static e_type type(double) {return DOUBLE;}
static e_type type(bool) {return BOOL;}
static e_type type(void*) {return VOID_STAR;}
static e_type type(double*) {return DOUBLE_STAR;}
static e_type type(float*) {return FLOAT_STAR;}
static e_type type(int*) {return INT_STAR;}
//static e_type type(const std::string&) {return STRING;}
*/
public:
value():m_label(0),m_itag(0){
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value():m_label(0) {
m_type = NONE;
u.m_unsigned_int64 = 0;
}
value(bool a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(bool a_value):m_label(0) {
m_type = BOOL;
u.m_bool = a_value;
}
// value(char a_value):m_label(0),m_itag(0) {
//#ifdef TOOLS_MEM
// mem::increment(s_class().c_str());
//#endif
// m_type = CHAR;
// u.m_char = a_value;
// }
value(short a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(short a_value):m_label(0) {
m_type = SHORT;
u.m_short = a_value;
}
value(int a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(int a_value):m_label(0) {
m_type = INT;
u.m_int = a_value;
}
value(int64 a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(int64 a_value):m_label(0) {
m_type = INT64;
u.m_int64 = a_value;
}
value(uint64 a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(uint64 a_value):m_label(0) {
m_type = UNSIGNED_INT64;
u.m_unsigned_int64 = a_value;
}
value(float a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(float a_value):m_label(0) {
m_type = FLOAT;
u.m_float = a_value;
}
value(double a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(double a_value):m_label(0) {
m_type = DOUBLE;
u.m_double = a_value;
}
// value(unsigned char a_value):m_label(0),m_itag(0) {
//#ifdef TOOLS_MEM
// mem::increment(s_class().c_str());
//#endif
// m_type = UNSIGNED_CHAR;
// u.m_unsigned_char = a_value;
// }
value(unsigned short a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(unsigned short a_value):m_label(0) {
m_type = UNSIGNED_SHORT;
u.m_unsigned_short = a_value;
}
value(unsigned int a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(unsigned int a_value):m_label(0) {
m_type = UNSIGNED_INT;
u.m_unsigned_int = a_value;
}
value(void* a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(void* a_value):m_label(0) {
m_type = VOID_STAR;
u.m_void_star = a_value;
}
value(double* a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(double* a_value):m_label(0) {
m_type = DOUBLE_STAR;
u.m_double_star = a_value;
}
value(float* a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(float* a_value):m_label(0) {
m_type = FLOAT_STAR;
u.m_float_star = a_value;
}
value(int* a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(int* a_value):m_label(0) {
m_type = INT_STAR;
u.m_int_star = a_value;
}
value(const char* a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(const char* a_value):m_label(0) {
m_type = STRING;
u.m_string = new std::string(a_value?a_value:"");
}
value(const std::string& a_value):m_label(0),m_itag(0) {
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(const std::string& a_value):m_label(0) {
m_type = STRING;
u.m_string = new std::string(a_value);
}
#ifdef TOOLS_MEM
#define TOOLS_VALUE_CSTOR(a_what,a_m_what,a_type) \
value(const std::vector<a_what>& a_v):m_label(0),m_itag(0){\
mem::increment(s_class().c_str());\
value(const std::vector<a_what>& a_v):m_label(0){\
m_type = a_type;\
std::vector<unsigned int> is(1);\
is[0] = (unsigned int)a_v.size();\
u.a_m_what = new array<a_what>(is);\
u.a_m_what->fill(a_v);\
}
#else
#define TOOLS_VALUE_CSTOR(a_what,a_m_what,a_type) \
value(const std::vector<a_what>& a_v):m_label(0),m_itag(0){\
m_type = a_type;\
std::vector<unsigned int> is(1);\
is[0] = (unsigned int)a_v.size();\
u.a_m_what = new array<a_what>(is);\
u.a_m_what->fill(a_v);\
}
#endif
//TOOLS_VALUE_CSTOR(unsigned char,m_array_unsigned_char,ARRAY_UNSIGNED_CHAR)
//TOOLS_VALUE_CSTOR(char,m_array_char,ARRAY_CHAR)
TOOLS_VALUE_CSTOR(unsigned short,m_array_unsigned_short,ARRAY_UNSIGNED_SHORT)
TOOLS_VALUE_CSTOR(short,m_array_short,ARRAY_SHORT)
TOOLS_VALUE_CSTOR(unsigned int,m_array_unsigned_int,ARRAY_UNSIGNED_INT)
@@ -242,23 +141,12 @@ public:
#undef TOOLS_VALUE_CSTOR
#ifdef TOOLS_MEM
#define TOOLS_VALUE_CSTORA(a_what,a_m_what,a_type) \
value(const array<a_what>& a_a):m_label(0),m_itag(0){\
mem::increment(s_class().c_str());\
value(const array<a_what>& a_a):m_label(0){\
m_type = a_type;\
u.a_m_what = new array<a_what>(a_a);\
}
#else
#define TOOLS_VALUE_CSTORA(a_what,a_m_what,a_type) \
value(const array<a_what>& a_a):m_label(0),m_itag(0){\
m_type = a_type;\
u.a_m_what = new array<a_what>(a_a);\
}
#endif
//TOOLS_VALUE_CSTORA(unsigned char,m_array_unsigned_char,ARRAY_UNSIGNED_CHAR)
//TOOLS_VALUE_CSTORA(char,m_array_char,ARRAY_CHAR)
TOOLS_VALUE_CSTORA(unsigned short,m_array_unsigned_short,ARRAY_UNSIGNED_SHORT)
TOOLS_VALUE_CSTORA(short,m_array_short,ARRAY_SHORT)
TOOLS_VALUE_CSTORA(unsigned int,m_array_unsigned_int,ARRAY_UNSIGNED_INT)
@@ -275,29 +163,15 @@ public:
virtual ~value() {
delete m_label;
reset();
#ifdef TOOLS_MEM
mem::decrement(s_class().c_str());
#endif
}
public:
value(const value& a_from):m_label(0),m_itag(a_from.m_itag){
#ifdef TOOLS_MEM
mem::increment(s_class().c_str());
#endif
value(const value& a_from):m_label(0){
if(a_from.m_label) m_label = new std::string(*a_from.m_label);
m_type = a_from.m_type;
if(a_from.m_type==STRING) {
u.m_string = new std::string(*a_from.u.m_string);
//} else if(a_from.m_type==ARRAY_UNSIGNED_CHAR) {
// u.m_array_unsigned_char =
// new array<unsigned char>(*a_from.u.m_array_unsigned_char);
//} else if(a_from.m_type==ARRAY_CHAR) {
// u.m_array_char = new array<char>(*a_from.u.m_array_char);
} else if(a_from.m_type==ARRAY_UNSIGNED_SHORT) {
u.m_array_unsigned_short =
new array<unsigned short>(*a_from.u.m_array_unsigned_short);
@@ -340,8 +214,6 @@ public:
delete m_label;m_label = 0;
if(a_from.m_label) m_label = new std::string(*a_from.m_label);
m_itag = a_from.m_itag;
reset();
m_type = a_from.m_type;
@@ -349,13 +221,6 @@ public:
if(a_from.m_type==STRING) {
u.m_string = new std::string(*a_from.u.m_string);
//} else if(a_from.m_type==ARRAY_UNSIGNED_CHAR) {
// u.m_array_unsigned_char =
// new array<unsigned char>(*a_from.u.m_array_unsigned_char);
//} else if(a_from.m_type==ARRAY_CHAR) {
// u.m_array_char = new array<char>(*a_from.u.m_array_char);
} else if(a_from.m_type==ARRAY_UNSIGNED_SHORT) {
u.m_array_unsigned_short = new array<unsigned short>(*a_from.u.m_array_unsigned_short);
@@ -392,45 +257,13 @@ public:
return *this;
}
/* for tests/symbolic.cpp.
public:
value operator*(const value& a_from) const {
value tmp(*this);
std::string serr;
multiply(tmp,a_from,serr);
return tmp;
}
value operator+(const value& a_from) const {
value tmp(*this);
std::string serr;
add(tmp,a_from,serr);
return tmp;
}
value operator-(const value& a_from) const {
value tmp(*this);
std::string serr;
subtract(tmp,a_from,serr);
return tmp;
}
value operator+=(const value& a_from) {
value _s = operator+(a_from);
*this = _s;
return _s;
}
value operator-=(const value& a_from) {
value _s = operator-(a_from);
*this = _s;
return _s;
}
*/
private:
static const std::string& s_empty() {
static const std::string s_v("");
return s_v;
}
public:
void set_itag(unsigned int a_itag) {m_itag = a_itag;} //gopaw
unsigned int itag() const {return m_itag;} //gopaw
void set_label(const std::string& a_s) {
delete m_label;
m_label = new std::string(a_s);
@@ -443,8 +276,6 @@ public:
m_type = a_type;
switch(a_type) {
case NONE: u.m_unsigned_int64 = 0;break;
//case UNSIGNED_CHAR: u.m_unsigned_char = 0;break;
//case CHAR: u.m_char = 0;break;
case UNSIGNED_SHORT: u.m_unsigned_short = 0;break;
case SHORT: u.m_short = 0;break;
case UNSIGNED_INT: u.m_unsigned_int = 0;break;
@@ -459,9 +290,6 @@ public:
case FLOAT_STAR: u.m_float_star = 0;break;
case INT_STAR: u.m_int_star = 0;break;
case STRING: u.m_string = new std::string("");break;
//case ARRAY_UNSIGNED_CHAR:
// u.m_array_unsigned_char = new array<unsigned char>();break;
//case ARRAY_CHAR:u.m_array_char = new array<char>();break;
case ARRAY_UNSIGNED_SHORT:
u.m_array_unsigned_short = new array<unsigned short>();break;
@@ -486,16 +314,7 @@ public:
m_type = NONE;
u.m_unsigned_int64 = 0;
}
//void set(char a_value) {
// reset();
// m_type = CHAR;
// u.m_char = a_value;
//}
//void set(unsigned char a_value) {
// reset();
// m_type = UNSIGNED_CHAR;
// u.m_unsigned_char = a_value;
//}
void set(short a_value) {
reset();
m_type = SHORT;
@@ -576,8 +395,6 @@ public:
u.m_int_star = a_value;
}
//unsigned char get_unsigned_char() const {return u.m_unsigned_char;}
//char get_char() const {return u.m_char;}
unsigned int get_unsigned_int() const {return u.m_unsigned_int;}
int get_int() const {return u.m_int;}
@@ -604,8 +421,6 @@ public:
u.a_m_what->fill(a_v);\
}
//TOOLS_VALUE_SET(unsigned char,m_array_unsigned_char,ARRAY_UNSIGNED_CHAR)
//TOOLS_VALUE_SET(char,m_array_char,ARRAY_CHAR)
TOOLS_VALUE_SET(unsigned short,m_array_unsigned_short,ARRAY_UNSIGNED_SHORT)
TOOLS_VALUE_SET(short,m_array_short,ARRAY_SHORT)
TOOLS_VALUE_SET(unsigned int,m_array_unsigned_int,ARRAY_UNSIGNED_INT)
@@ -629,8 +444,6 @@ public:
u.a_m_what->fill(a_v);\
}
//TOOLS_VALUE_SET2(unsigned char,m_array_unsigned_char,ARRAY_UNSIGNED_CHAR)
//TOOLS_VALUE_SET2(char,m_array_char,ARRAY_CHAR)
TOOLS_VALUE_SET2(unsigned short,m_array_unsigned_short,ARRAY_UNSIGNED_SHORT)
TOOLS_VALUE_SET2(short,m_array_short,ARRAY_SHORT)
TOOLS_VALUE_SET2(unsigned int,m_array_unsigned_int,ARRAY_UNSIGNED_INT)
@@ -644,28 +457,6 @@ public:
#undef TOOLS_VALUE_SET2
#define TOOLS_VALUE_GET(a_what,a_get_what,a_m_what) \
const std::vector<a_what>& a_get_what(std::vector<unsigned int>& a_orders) const {\
a_orders = u.a_m_what->orders();\
return u.a_m_what->vector();\
}
//TOOLS_VALUE_GET(unsigned char,get_array_unsigned_char,m_array_unsigned_char)
//TOOLS_VALUE_GET(char,get_array_char,m_array_char)
TOOLS_VALUE_GET(unsigned short,get_array_unsigned_short,m_array_unsigned_short)
TOOLS_VALUE_GET(short,get_array_short,m_array_short)
TOOLS_VALUE_GET(unsigned int,get_array_unsigned_int,m_array_unsigned_int)
TOOLS_VALUE_GET(int,get_array_int,m_array_int)
TOOLS_VALUE_GET(uint64,get_array_unsigned_int64,m_array_unsigned_int64)
TOOLS_VALUE_GET(int64,get_array_int64,m_array_int64)
TOOLS_VALUE_GET(float,get_array_float,m_array_float)
TOOLS_VALUE_GET(double,get_array_double,m_array_double)
TOOLS_VALUE_GET(bool,get_array_bool,m_array_bool)
TOOLS_VALUE_GET(std::string,get_array_string,m_array_string)
#undef TOOLS_VALUE_GET
public:
bool s_type(std::string& a_s) const {return s_type(m_type,a_s);}
@@ -683,13 +474,9 @@ public:
case BOOL:a_s = "BOOL";return true;
case SHORT:a_s = "SHORT";return true;
case FLOAT:a_s = "FLOAT";return true;
//case CHAR:a_s = "CHAR";return true;
//case UNSIGNED_CHAR:a_s = "UNSIGNED_CHAR";return true;
case UNSIGNED_SHORT:a_s = "UNSIGNED_SHORT";return true;
case UNSIGNED_INT:a_s = "UNSIGNED_INT";return true;
case UNSIGNED_INT64:a_s = "UNSIGNED_INT64";return true;
//case ARRAY_UNSIGNED_CHAR:a_s = "ARRAY_UNSIGNED_CHAR";return true;
//case ARRAY_CHAR:a_s = "ARRAY_CHAR";return true;
case ARRAY_UNSIGNED_SHORT:a_s = "ARRAY_UNSIGNED_SHORT";return true;
case ARRAY_SHORT:a_s = "ARRAY_SHORT";return true;
case ARRAY_UNSIGNED_INT:a_s = "ARRAY_UNSIGNED_INT";return true;
@@ -714,12 +501,6 @@ public:
case BOOL:
sprintf(a_s,5,"%s",a_v.u.m_bool?"true":"false");
return true;
//case UNSIGNED_CHAR:
// sprintf(a_s,32,"%c",a_v.u.m_unsigned_char);
// return true;
//case CHAR:
// sprintf(a_s,32,"%c",a_v.u.m_char);
// return true;
case UNSIGNED_SHORT:
sprintf(a_s,32,"%u",a_v.u.m_unsigned_short);
return true;
@@ -760,13 +541,6 @@ public:
a_s = *a_v.u.m_string;
return true;
//case ARRAY_UNSIGNED_CHAR:
// a_s = tos<unsigned char>(a_v.u.m_array_unsigned_char->vector());
// return true;
//case ARRAY_CHAR:
// a_s = tos<char>(a_v.u.m_array_char->vector());
// return true;
case ARRAY_UNSIGNED_SHORT:
return nums2s<unsigned short>(a_v.u.m_array_unsigned_short->vector(),a_s);
case ARRAY_SHORT:
@@ -797,213 +571,6 @@ public:
}
}
/*
size_t header_size() const {return header_size(*this);} //used in base_evaluator::dump()
static size_t header_size(const value& a_v){
switch(a_v.m_type) {
case NONE: return 5;
case BOOL: return 5;
//case UNSIGNED_CHAR: return 1;
//case CHAR: return 1;
case INT:
case UNSIGNED_SHORT:
case SHORT:
case FLOAT:
case UNSIGNED_INT: return 8;
case DOUBLE:
case INT64:
case UNSIGNED_INT64:
case VOID_STAR:
case DOUBLE_STAR:
case FLOAT_STAR:
case INT_STAR:
case STRING: return 12;
//case ARRAY_UNSIGNED_CHAR:
//case ARRAY_CHAR:
case ARRAY_UNSIGNED_SHORT:
case ARRAY_SHORT:
case ARRAY_UNSIGNED_INT:
case ARRAY_INT:
case ARRAY_UNSIGNED_INT64:
case ARRAY_INT64:
case ARRAY_FLOAT:
case ARRAY_DOUBLE:
case ARRAY_BOOL:
case ARRAY_STRING: return 5; //size("array")
default: return 8;
}
}
*/
bool to_double(double& a_d) const {
switch(m_type) {
case INT:
a_d = u.m_int;
return true;
case DOUBLE:
a_d = u.m_double;
return true;
case UNSIGNED_SHORT:
a_d = u.m_unsigned_short;
return true;
case UNSIGNED_INT:
a_d = u.m_unsigned_int;
return true;
case SHORT:
a_d = u.m_short;
return true;
case INT64:
a_d = (double)u.m_int64;
return true;
case UNSIGNED_INT64:
a_d = (double)u.m_unsigned_int64;
return true;
case FLOAT:
a_d = u.m_float;
return true;
//case UNSIGNED_CHAR:
// a_d = u.m_unsigned_char;
// return true;
//case CHAR:
// a_d = u.m_char;
// return true;
case BOOL:
a_d = u.m_bool?1:0;
return true;
case NONE:
case STRING:
case VOID_STAR:
case DOUBLE_STAR:
case FLOAT_STAR:
case INT_STAR:
//case ARRAY_UNSIGNED_CHAR:
//case ARRAY_CHAR:
case ARRAY_UNSIGNED_SHORT:
case ARRAY_SHORT:
case ARRAY_UNSIGNED_INT:
case ARRAY_INT:
case ARRAY_UNSIGNED_INT64:
case ARRAY_INT64:
case ARRAY_FLOAT:
case ARRAY_DOUBLE:
case ARRAY_BOOL:
case ARRAY_STRING:
break;
}
a_d = 0;
return false;
}
bool is_array() const {
switch(m_type) {
case INT:
case DOUBLE:
case UNSIGNED_SHORT:
case UNSIGNED_INT:
case SHORT:
case INT64:
case UNSIGNED_INT64:
case FLOAT:
//case UNSIGNED_CHAR:
//case CHAR:
case BOOL:
case NONE:
case STRING:
case VOID_STAR:
case DOUBLE_STAR:
case FLOAT_STAR:
case INT_STAR:
return false;
//case ARRAY_UNSIGNED_CHAR:
//case ARRAY_CHAR:
case ARRAY_UNSIGNED_SHORT:
case ARRAY_SHORT:
case ARRAY_UNSIGNED_INT:
case ARRAY_INT:
case ARRAY_UNSIGNED_INT64:
case ARRAY_INT64:
case ARRAY_FLOAT:
case ARRAY_DOUBLE:
case ARRAY_BOOL:
case ARRAY_STRING:
return true;
}
return false;
}
size_t array_size() const {
switch(m_type) {
case INT:
case DOUBLE:
case UNSIGNED_SHORT:
case UNSIGNED_INT:
case SHORT:
case INT64:
case UNSIGNED_INT64:
case FLOAT:
//case UNSIGNED_CHAR:
//case CHAR:
case BOOL:
case NONE:
case STRING:
case VOID_STAR:
case DOUBLE_STAR:
case FLOAT_STAR:
case INT_STAR:
return 0;
//case ARRAY_UNSIGNED_CHAR:
//case ARRAY_CHAR:
case ARRAY_UNSIGNED_SHORT:
return u.m_array_unsigned_short->size();
case ARRAY_SHORT:
return u.m_array_short->size();
case ARRAY_UNSIGNED_INT:
return u.m_array_unsigned_int->size();
case ARRAY_INT:
return u.m_array_int->size();
case ARRAY_UNSIGNED_INT64:
return u.m_array_unsigned_int64->size();
case ARRAY_INT64:
return u.m_array_int64->size();
case ARRAY_FLOAT:
return u.m_array_float->size();
case ARRAY_DOUBLE:
return u.m_array_double->size();
case ARRAY_BOOL:
return u.m_array_bool->size();
case ARRAY_STRING:
return u.m_array_string->size();
}
return 0;
}
#define TOOLS_ARRAY_VEC(a_what,a_get_what,a_m_what) \
const std::vector<a_what>& a_get_what() const {return u.a_m_what->vector();}\
std::vector<a_what>& a_get_what() {return u.a_m_what->vector();}
//TOOLS_ARRAY_VEC(unsigned char,array_unsigned_char,m_array_unsigned_char)
//TOOLS_ARRAY_VEC(char,array_char,m_array_char)
TOOLS_ARRAY_VEC(unsigned short,array_unsigned_short,m_array_unsigned_short)
TOOLS_ARRAY_VEC(short,array_short,m_array_short)
TOOLS_ARRAY_VEC(unsigned int,array_unsigned_int,m_array_unsigned_int)
TOOLS_ARRAY_VEC(int,array_int,m_array_int)
TOOLS_ARRAY_VEC(uint64,array_unsigned_int64,m_array_unsigned_int64)
TOOLS_ARRAY_VEC(int64,array_int64,m_array_int64)
TOOLS_ARRAY_VEC(float,array_float,m_array_float)
TOOLS_ARRAY_VEC(double,array_double,m_array_double)
TOOLS_ARRAY_VEC(bool,array_bool,m_array_bool)
TOOLS_ARRAY_VEC(std::string,array_string,m_array_string)
#undef TOOLS_ARRAY_VEC
public: // for valop :
std::string stype() const {
@@ -1018,60 +585,6 @@ public: // for valop :
return _s;
}
static std::string error_div_zero() {return "divide by zero.";}
static bool assign(value&,const value&,std::string&);
// operations in Expression.cxx :
static bool minus(value&,std::string&);
static bool do_not(value&,std::string&);
static bool add(value&,const value&,std::string&);
static bool subtract(value&,const value&,std::string&);
static bool multiply(value&,const value&,std::string&);
static bool divide(value&,const value&,std::string&);
static bool if_gt(value&,const value&,std::string&);
static bool if_eq(value&,const value&,std::string&);
static bool if_ne(value& aThis,const value& aV,
std::string& aError) {
if(!if_eq(aThis,aV,aError)) return false;
aThis.u.m_bool = (aThis.u.m_bool?false:true);
return true;
}
static bool if_ge(value& aThis,const value& aV,
std::string& aError){
value tmp(aThis);
if(!if_eq(aThis,aV,aError)) return false;
if(aThis.u.m_bool) return true;
// then not equal, check gt :
if(!if_gt(tmp,aV,aError)) return false;
aThis.u.m_bool = tmp.u.m_bool;
return true;
}
static bool if_lt(value& aThis,const value& aV,
std::string& aError){
if(!if_ge(aThis,aV,aError)) return false;
aThis.u.m_bool = (aThis.u.m_bool?false:true);
return true;
}
static bool if_le(value& aThis,const value& aV,
std::string& aError){
if(!if_gt(aThis,aV,aError)) return false;
aThis.u.m_bool = (aThis.u.m_bool?false:true);
return true;
}
static bool if_and(value&,const value&,std::string&);
static bool if_or(value&,const value&,std::string&);
static bool to_double(const value&,double&);
static bool cxx_type(const value&,std::string&);
//static bool i_set(value&,const Slash::Core::Ivalue&);
static std::string to_string(const value&);
protected:
@@ -1079,13 +592,6 @@ protected:
if(m_type==STRING) {
delete u.m_string;
u.m_string = 0;
//} else if(m_type==ARRAY_UNSIGNED_CHAR) {
// delete u.m_array_unsigned_char;u.m_array_unsigned_char = 0;
//} else if(m_type==ARRAY_CHAR) {
// delete u.m_array_char;u.m_array_char = 0;
} else if(m_type==ARRAY_UNSIGNED_SHORT) {
delete u.m_array_unsigned_short;u.m_array_unsigned_short = 0;
@@ -1122,18 +628,15 @@ protected:
}
protected:
std::string* m_label;
unsigned int m_itag;
protected:
e_type m_type;
union {
bool m_bool;
//char m_char;
int m_int;
short m_short;
int64 m_int64;
float m_float;
double m_double;
//unsigned char m_unsigned_char;
unsigned short m_unsigned_short;
unsigned int m_unsigned_int;
uint64 m_unsigned_int64;