00001 #ifndef stdutil_h
00002 #define stdutil_h
00003
00004 #include <iosfwd>
00005
00006 #include <cstdio>
00007 #include <cstdarg>
00008
00009 #include <string>
00010 #include <vector>
00011 #include <iostream>
00012
00013 namespace stdutil {
00014
00015 inline std::string vform( const char * format, va_list ap, va_list ap1 ) {
00016 char * buf = new char[vsnprintf( NULL, 0, format, ap ) + 1];
00017 vsprintf( buf, format, ap1 );
00018 string val( buf );
00019 delete [] buf;
00020 return val;
00021 }
00022
00023 inline std::string form( const char * format, ... )
00024 __attribute__ ((format (printf, 1, 2)));
00025
00026 inline std::string form( const char * format, ... ) {
00027 va_list ap;
00028 va_list ap1;
00029 va_start( ap, format );
00030 va_start( ap1, format );
00031 string val( vform( format, ap, ap1 ) );
00032 va_end( ap );
00033 va_end( ap1 );
00034 return val;
00035 }
00036
00037 inline std::string numstring( char n, int w = 0 ) { return form( "%*hhd", w, n ); }
00038 inline std::string numstring( unsigned char n, int w = 0 ) { return form( "%*hhu", w, n ); }
00039 inline std::string numstring( int n, int w = 0 ) { return form( "%*d", w, n ); }
00040 inline std::string numstring( unsigned n, int w = 0 ) { return form( "%*u", w, n ); }
00041 inline std::string numstring( long n, int w = 0 ) { return form( "%*ld", w, n ); }
00042 inline std::string numstring( unsigned long n, int w = 0 ) { return form( "%*lu", w, n ); }
00043
00044 inline std::string hexstring( char n, int w = 4 ) { return form( "%#0*hhx", w, n ); }
00045 inline std::string hexstring( unsigned char n, int w = 4 ) { return form( "%#0*hhx", w, n ); }
00046 inline std::string hexstring( int n, int w = 10 ){ return form( "%#0*x", w, n ); }
00047 inline std::string hexstring( unsigned n, int w = 10 ){ return form( "%#0*x", w, n ); }
00048 inline std::string hexstring( long n, int w = 10 ){ return form( "%#0*lx", w, n ); }
00049 inline std::string hexstring( unsigned long n, int w = 10 ){ return form( "%#0*lx", w, n ); }
00050
00051 inline std::string octstring( char n, int w = 4 ) { return form( "%#0*hho", w, n ); }
00052 inline std::string octstring( unsigned char n, int w = 4 ) { return form( "%#0*hho", w, n ); }
00053 inline std::string octstring( int n, int w = 0 ) { return form( "%#*o", w, n ); }
00054 inline std::string octstring( unsigned n, int w = 0 ) { return form( "%#*o", w, n ); }
00055 inline std::string octstring( long n, int w = 0 ) { return form( "%#*lo", w, n ); }
00056 inline std::string octstring( unsigned long n, int w = 0 ) { return form( "%#*lo", w, n ); }
00057
00058 }
00059 #endif // stdutil_h