Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

IntegerConversion.h

Go to the documentation of this file.
00001 #include <iostream> 
00002 #include <string> 
00003 
00004 // Prevents the compiler from generating several copies of 
00005 // methods during the precompiling stage, which leads to longer 
00006 // compile time. 
00007 
00008 #if defined(__GNUC__) 
00009 #pragma interface 
00010 #endif
00011 
00012 
00023 template <class Integer> class IntegerConversion {
00024 
00025 public:
00026 
00028   AIDA_STD::string itostr(Integer n); 
00030   Integer strtoi(const AIDA_STD::string &s); 
00031 
00032 private:
00035   Integer rec_strtoi(const AIDA_STD::string &s); 
00036 };
00037 
00038 
00049 template <class Integer> class UnsignedIntegerConversion {
00050 
00051 public:
00052 
00054   AIDA_STD::string itostr(Integer n); 
00056   Integer strtoi(const AIDA_STD::string &s); 
00057 
00058 private:
00061   Integer rec_strtoi(const AIDA_STD::string &s); 
00062 };
00063 
00064 #if defined(__GNUC__) 
00065 #pragma implementation 
00066 #endif
00067 
00068 template <class Integer> AIDA_STD::string IntegerConversion<Integer>:: itostr(Integer n) {
00069 
00070   AIDA_STD::string retval; 
00071   bool minus=0; 
00072   if (n < 0) {
00073     n=-n; 
00074     minus=1; 
00075   }
00076 
00077   do {
00078     retval.insert((AIDA_STD::string::size_type)0,1,(char)('0'+n%10)); 
00079   } while ((n/=10)>0); 
00080 
00081   if (minus)
00082     retval.insert((AIDA_STD::string::size_type)0,1,'-'); 
00083 
00084   return retval; 
00085 }
00086 
00087 template <class Integer> Integer IntegerConversion<Integer>:: strtoi(const AIDA_STD::string & s) {
00088 
00089   if (s.substr(0,1) == "-") {
00090 
00091     return -rec_strtoi(s.substr(1)); // Remove minus sign from string 
00092   } else {
00093 
00094     return rec_strtoi(s); 
00095   } 
00096 }
00097 
00098 template <class Integer> Integer IntegerConversion<Integer>:: rec_strtoi(const AIDA_STD::string & s) {
00099 
00100   if (s.length()) {
00101 
00102     return 10*rec_strtoi(s.substr(0,s.length()-1)) + s.c_str()[s.length()-1]-'0'; 
00103   } else {
00104 
00105     return 0; 
00106   } 
00107 }
00108 
00109 // --------------------------------------------------------------------------------
00110 
00111 template <class Integer> AIDA_STD::string UnsignedIntegerConversion<Integer>:: itostr(Integer n) {
00112 
00113   AIDA_STD::string retval; 
00114   do {
00115     retval.insert((AIDA_STD::string::size_type)0,1,(char)('0'+n%10)); 
00116   } while ((n/=10)>0); 
00117 
00118   return retval;
00119 }
00120 
00121 template <class Integer> Integer UnsignedIntegerConversion<Integer>:: strtoi(const AIDA_STD::string & s) {
00122 
00123   if (s.substr(0,1) == "-") {
00124 
00125     return -rec_strtoi(s.substr(1)); // Remove minus sign from string 
00126   } else {
00127 
00128     return rec_strtoi(s); 
00129   } 
00130 }
00131 
00132 template <class Integer> Integer UnsignedIntegerConversion<Integer>:: rec_strtoi(const AIDA_STD::string & s) {
00133 
00134   if (s.length()) {
00135 
00136     return 10*rec_strtoi(s.substr(0,s.length()-1)) + s.c_str()[s.length()-1]-'0'; 
00137   } else {
00138 
00139     return 0; 
00140   } 
00141 }
00142 

Generated on Tue May 20 14:50:25 2003 for HepUtilities by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002