Back to home page

EIC code displayed by LXR

 
 

    


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