MsgFormat.cxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <MsgFormat.h>
00011 #include <cstdlib>
00012 #include <iostream>
00013 #include <iomanip>
00014 #include <MsgBoundFormat.h>
00015
00016 using namespace std;
00017
00018
00019
00020 ostream& operator<<(ostream& os, const MsgBoundFormat& bf)
00021 {
00022
00023
00024
00025
00026
00027
00028
00029
00030 int p = os.precision();
00031 MsgFormat::fmtflags f =
00032 os.setf(bf.f.fmt,static_cast<MsgFormat::fmtflags>(0xFFFF));
00033 char c = os.fill();
00034
00035 if (bf.f.flc != c) os.fill(bf.f.flc);
00036
00037 if ((bf.f.fmt&ios::hex) || (bf.f.fmt&ios::oct)) {
00038 os.setf(bf.f.fmt, ios::basefield);
00039 os << setprecision(bf.f.prc) << setw(bf.f.wdt) << (int)bf.val;
00040 }
00041 else {
00042 os << setprecision(bf.f.prc) << setw(bf.f.wdt) << bf.val;
00043 }
00044
00045
00046 if (c != os.fill()) os.fill(c);
00047 os.precision(p);
00048 os.flags(f);
00049 return os;
00050 }
00051
00052
00053
00054 MsgFormat::MsgFormat(const char* f)
00055 {
00056
00057
00058
00059
00060
00061 int i, j=0, k=0;
00062 char c, n[2][16];
00063 prc = 6;
00064 wdt = 0;
00065 fmt = static_cast<fmtflags>(0);
00066 flc = ' ';
00067 for (i=0; f[i] != '\0'; ++i) {
00068 switch(c = f[i]) {
00069 case '-': fmt |= ios::left; break;
00070 case '+': fmt |= ios::showpos; break;
00071 case ' ': break;
00072 case 'O': flc = '0'; fmt |= ios::left; break;
00073 case 'd': break;
00074 case 'u': break;
00075 case 'i': break;
00076 case 'o': fmt |= ios::oct; fmt |= ios::showbase; break;
00077 case 'x': fmt |= ios::hex; fmt |= ios::showbase; break;
00078 case 'X': fmt |= ios::hex; fmt |= ios::showbase; break;
00079 case 'f': fmt |= ios::fixed; break;
00080 case 'e': fmt |= ios::scientific; break;
00081 case 'E': fmt |= ios::scientific; break;
00082 case 'g': break;
00083 case 'G': break;
00084 default:
00085 if (c == '.') {
00086 n[j][k] = '\0';
00087 ++j;
00088 k = 0;
00089 }
00090 else {
00091 if (c >= '0' && c <= '9') n[j][k++] = c;
00092 }
00093 break;
00094 }
00095 }
00096 if (k!=0 || j!=0) {
00097 if (j==0) n[0][k] = '\0';
00098 wdt = atoi(n[0]);
00099 }
00100 if (j>0) {
00101 n[1][k] = '\0';
00102 prc = atoi(n[1]);
00103 }
00104 }