00001 #include <iostream>
00002 #include <string>
00003
00004
00005
00006
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));
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));
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