Import Geant4 10.3.0 source tree
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
#include "words"
|
||||
#include "sep"
|
||||
#include "vmanip"
|
||||
#include "srep"
|
||||
|
||||
namespace tools {
|
||||
|
||||
@@ -100,7 +101,7 @@ inline bool env_append(const std::string& a_env,
|
||||
tools::words(env_value,a_sep,false,ws);
|
||||
// Remove existing one, so that value be put at end.
|
||||
tools::remove(ws,value);
|
||||
if(!tools::nums2s<std::string>(ws,env_value,a_sep)) {}
|
||||
if(!nums2s<std::string>(ws,env_value,a_sep)) {}
|
||||
}
|
||||
|
||||
if(env_value.size()) env_value += a_sep;
|
||||
@@ -112,8 +113,7 @@ inline bool env_append(const std::string& a_env,
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool env_path_append(const std::string& a_env,
|
||||
const std::vector<std::string>& a_paths){
|
||||
inline bool env_path_append(const std::string& a_env,const std::vector<std::string>& a_paths){
|
||||
return env_append(a_env,psep(),a_paths);
|
||||
}
|
||||
|
||||
@@ -124,6 +124,65 @@ inline bool env_append_path(const std::string& a_env,
|
||||
return env_append(a_env,psep(),v);
|
||||
}
|
||||
|
||||
// OpenPAW, Panoramix :
|
||||
inline bool repenv(std::string& a_string) {
|
||||
char spec_char = '\n';
|
||||
std::string::size_type dollar;
|
||||
while((dollar=a_string.find('$'))!=std::string::npos){
|
||||
std::string::size_type slash = a_string.find('/',dollar+1);
|
||||
std::string::size_type back_slash = a_string.find('\\',dollar+1);
|
||||
std::string::size_type pos = std::string::npos;
|
||||
if(slash!=std::string::npos) {
|
||||
if(back_slash!=std::string::npos) {
|
||||
pos = slash<back_slash?slash:back_slash;
|
||||
} else {
|
||||
pos = slash;
|
||||
}
|
||||
} else {
|
||||
if(back_slash!=std::string::npos) {
|
||||
pos = back_slash;
|
||||
} else {
|
||||
pos = std::string::npos;
|
||||
}
|
||||
}
|
||||
std::string env;
|
||||
if(pos==std::string::npos) {
|
||||
env = a_string.substr(dollar+1,a_string.length()-(dollar+1));
|
||||
} else {
|
||||
// abc$xxx/ef
|
||||
// 0 3 7 9
|
||||
env = a_string.substr(dollar+1,pos-(dollar+1));
|
||||
}
|
||||
char* val = ::getenv(env.c_str());
|
||||
if(!val) {
|
||||
// We may have $ in a_string not attached to an env variable.
|
||||
// For example at LAL, some Windows account name have a leading $
|
||||
// that is found back in the home directory path. To bypass this
|
||||
// problem we change temporarily the $ by spec_char and continue
|
||||
// the loop. We change back all the spec_chars to $ at end.
|
||||
a_string[dollar] = spec_char;
|
||||
} else {
|
||||
std::string value = a_string.substr(0,dollar);
|
||||
value += val;
|
||||
if(pos!=std::string::npos) value += a_string.substr(pos,a_string.length()-pos);
|
||||
a_string = value;
|
||||
}
|
||||
}
|
||||
replace(a_string,spec_char,'$');
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool file_name(const std::string& a_path,std::string& a_name) {
|
||||
//used in osc packages and a tools::xml::parser::load_file() compatible for OnX.
|
||||
a_name = a_path;
|
||||
if(!repenv(a_name)) {a_name.clear();return false;}
|
||||
#ifdef _WIN32
|
||||
replace(a_name,"/","\\");
|
||||
replace(a_name,"\"","");
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user