Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/Geant4/tools/eqT 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_eqT
0005 #define tools_eqT
0006 
0007 namespace tools {
0008 
0009 template <class NUMBER,class PREC>
0010 inline bool numbers_are_equal(const NUMBER& a_left,const NUMBER& a_right,const PREC& a_prec,PREC(*a_fabs)(const NUMBER&)) {
0011   NUMBER diff = a_left - a_right;
0012   if(a_fabs(diff)>=a_prec) return false;
0013   return true;
0014 }
0015 
0016 template <class NUMBER,class PREC>
0017 inline bool is_zero(const NUMBER& a_left,const PREC& a_prec,PREC(*a_fabs)(const NUMBER&)) {
0018   if(a_fabs(a_left)>=a_prec) return false;
0019   return true;
0020 }
0021 
0022 template <class VEC,class PREC>
0023 inline bool vectors_are_equal(const VEC& a_1,const VEC& a_2,const PREC& a_prec,PREC(*a_fabs)(const PREC&)) {
0024   if(a_1.size()!=a_2.size()) return false;
0025   typedef typename VEC::size_type sz_t;
0026   sz_t sz = a_1.size();
0027   //bool status = true;
0028   for(sz_t index=0;index<sz;index++) {
0029     if(!numbers_are_equal(a_1[index],a_2[index],a_prec,a_fabs))
0030     //{ ::printf("debug : vectors_are_equals : %lu : %g %g\n",index,a_1[index],a_2[index]);
0031       return false;
0032       //status = false;
0033     //}
0034   }
0035   return true;
0036   //return status;
0037 }
0038 
0039 template <class VECVEC,class PREC>
0040 inline bool vecvecs_are_equal(const VECVEC& a_1,const VECVEC& a_2,const PREC& a_prec,PREC(*a_fabs)(const PREC&)) {
0041   if(a_1.size()!=a_2.size()) return false;
0042   typedef typename VECVEC::size_type sz_t;
0043   sz_t sz = a_1.size();
0044   for(sz_t index=0;index<sz;index++) {
0045     if(!vectors_are_equal(a_1[index],a_2[index],a_prec,a_fabs)) return false;
0046   }
0047   return true;
0048 }
0049 
0050 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
0051 /// PREC(*a_fabs)(PREC) : /////////////////////////////////////////////////////////////////////////////////////
0052 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
0053 
0054 // for histo equals functions.
0055 
0056 template <class NUMBER,class PREC>
0057 inline bool numbers_are_equal(const NUMBER& a_left,const NUMBER& a_right,const PREC& a_prec,PREC(*a_fabs)(NUMBER)) {
0058   NUMBER diff = a_left - a_right;
0059   if(a_fabs(diff)>=a_prec) return false;
0060   return true;
0061 }
0062 
0063 template <class VEC,class PREC>
0064 inline bool vectors_are_equal(const VEC& a_1,const VEC& a_2,const PREC& a_prec,PREC(*a_fabs)(PREC)) {
0065   if(a_1.size()!=a_2.size()) return false;
0066   typedef typename VEC::size_type sz_t;
0067   sz_t sz = a_1.size();
0068   //bool status = true;
0069   for(sz_t index=0;index<sz;index++) {
0070     if(!numbers_are_equal(a_1[index],a_2[index],a_prec,a_fabs))
0071     //{ ::printf("debug : vectors_are_equals : %lu : %g %g\n",index,a_1[index],a_2[index]);
0072       return false;
0073       //status = false;
0074     //}
0075   }
0076   return true;
0077   //return status;
0078 }
0079 
0080 template <class VECVEC,class PREC>
0081 inline bool vecvecs_are_equal(const VECVEC& a_1,const VECVEC& a_2,const PREC& a_prec,PREC(*a_fabs)(PREC)) {
0082   if(a_1.size()!=a_2.size()) return false;
0083   typedef typename VECVEC::size_type sz_t;
0084   sz_t sz = a_1.size();
0085   for(sz_t index=0;index<sz;index++) {
0086     if(!vectors_are_equal(a_1[index],a_2[index],a_prec,a_fabs)) return false;
0087   }
0088   return true;
0089 }
0090 
0091 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
0092 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
0093 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
0094 
0095 }
0096 
0097 #endif