// istring2.cpp #include "istring2.h" int numeric( const string &s ) { size_t n = s.find_first_not_of("0123456789"); if ( n == NPOS ) return 1; if ( n != 0 ) return 0; if ( s.is_null() ) return 0; if ( s.find_first_of("+-") != 0 ) return 0; n = s.find_first_not_of("0123456789",1); // Pal 2. jos "-4" ??? return ( n >= s.length() ); } string add(const string &s1,const string &s2) { if ( numeric(s1) && numeric(s2) ) return itostr(int_val(s1) + int_val(s2)); return string(s1).append(s2); } string operator+(char c, const Istring &s) { return add(string(c),s); } string operator+(const Istring &s, char c) { return add(s,string(c)); } string operator+(int i, const Istring &s) { return add(itostr(i),s); } string operator+(const Istring &s, int i) { return add(s,itostr(i)); } string operator+(const Istring &s1, const char *s2) { return add(s1,string(s2));} string operator+(const Istring &s1, const Istring &s2) { return add(s1,s2); } string operator+(const char *s1, const Istring &s2) { return add(string(s1),s2);}