Warning, /include/Geant4/tools/scast is written in an unsupported language. File is not indexed.
0001 // Copyright (C) 2010, Guy Barrand. All rights reserved.
0002 // See the file tools.license for terms.
0003
0004 #ifndef tools_scast
0005 #define tools_scast
0006
0007 // For implementations of cast methods.
0008 #include "cid"
0009 #include "rcmp"
0010
0011 namespace tools {
0012
0013 template <class FROM,class TO>
0014 inline TO* safe_cast(FROM& a_o) {
0015 return (TO*)a_o.cast(TO::s_class());
0016 }
0017
0018 template <class FROM,class TO>
0019 inline const TO* safe_cast(const FROM& a_o) {
0020 return (const TO*)a_o.cast(TO::s_class());
0021 }
0022
0023 template <class FROM,class TO>
0024 inline TO* id_cast(FROM& a_o) {
0025 return (TO*)a_o.cast(TO::id_class());
0026 }
0027
0028 template <class FROM,class TO>
0029 inline const TO* id_cast(const FROM& a_o) {
0030 return (const TO*)a_o.cast(TO::id_class());
0031 }
0032
0033 template <class TO>
0034 inline void* cmp_cast(const TO* a_this,const std::string& a_class) {
0035 if(!rcmp(a_class,TO::s_class())) return 0;
0036 return (void*)static_cast<const TO*>(a_this);
0037 }
0038
0039 template <class TO>
0040 inline void* cmp_cast(const TO* a_this,cid a_id) {
0041 if(TO::id_class()!=a_id) return 0;
0042 return (void*)static_cast<const TO*>(a_this);
0043 }
0044
0045 }
0046
0047 #endif