MechSys  1.0
Computing library for simulations in continuum and discrete mechanics
/home/dorival/mechsys/lib/util/numstreams.h
Go to the documentation of this file.
00001 /************************************************************************
00002  * MechSys - Open Library for Mechanical Systems                        *
00003  * Copyright (C) 2005 Dorival M. Pedroso, Raul Durand                   *
00004  * Copyright (C) 2009 Sergio Galindo                                    *
00005  *                                                                      *
00006  * This program is free software: you can redistribute it and/or modify *
00007  * it under the terms of the GNU General Public License as published by *
00008  * the Free Software Foundation, either version 3 of the License, or    *
00009  * any later version.                                                   *
00010  *                                                                      *
00011  * This program is distributed in the hope that it will be useful,      *
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         *
00014  * GNU General Public License for more details.                         *
00015  *                                                                      *
00016  * You should have received a copy of the GNU General Public License    *
00017  * along with this program. If not, see <http://www.gnu.org/licenses/>  *
00018  ************************************************************************/
00019 
00020 #ifndef MECHSYS_NUMSTREAMS_H
00021 #define MECHSYS_NUMSTREAMS_H
00022 
00023 // STL
00024 #include <iostream>
00025 #include <iomanip>
00026 
00027 namespace Util
00028 {
00029 
00031 struct NumStream
00032 {
00033     bool BoolAlpha;  
00034     bool Integer;    
00035     bool Scientific; 
00036     int  Width;      
00037     int  Precision;  
00038     bool Reset;      
00039 };
00040 
00041 //                    bool  integ  scien   w   p  reset
00042 NumStream _a     = {  true, false, false,  0,  0, false }; 
00043 NumStream _2     = { false,  true, false,  2,  0, false }; 
00044 NumStream _3     = { false,  true, false,  3,  0, false }; 
00045 NumStream _4     = { false,  true, false,  4,  0, false }; 
00046 NumStream _6     = { false,  true, false,  6,  0, false }; 
00047 NumStream _8     = { false,  true, false,  8,  0, false }; 
00048 NumStream _3s    = { false, false,  true,  0,  3, false }; 
00049 NumStream _6s    = { false, false,  true,  0,  6, false }; 
00050 NumStream _8s    = { false, false,  true,  0,  8, false }; 
00051 NumStream _15s   = { false, false,  true,  0, 15, false }; 
00052 NumStream _3_2   = { false, false, false,  3,  2, false }; 
00053 NumStream _4_2   = { false, false, false,  4,  2, false }; 
00054 NumStream _6_2   = { false, false, false,  6,  3, false }; 
00055 NumStream _6_3   = { false, false, false,  6,  3, false }; 
00056 NumStream _6_4   = { false, false, false,  6,  4, false }; 
00057 NumStream _6_6   = { false, false, false,  6,  6, false }; 
00058 NumStream _8_0   = { false, false, false,  8,  0, false }; 
00059 NumStream _8_2   = { false, false, false,  8,  2, false }; 
00060 NumStream _8_3   = { false, false, false,  8,  3, false }; 
00061 NumStream _8_4   = { false, false, false,  8,  4, false }; 
00062 NumStream _8_6   = { false, false, false,  8,  6, false }; 
00063 NumStream _10_2  = { false, false, false, 10,  2, false }; 
00064 NumStream _10_3  = { false, false, false, 10,  3, false }; 
00065 NumStream _10_4  = { false, false, false, 10,  4, false }; 
00066 NumStream _10_6  = { false, false, false, 10,  6, false }; 
00067 NumStream _12_4  = { false, false, false, 12,  4, false }; 
00068 NumStream _12_6  = { false, false, false, 12,  6, false }; 
00069 NumStream _13_2  = { false, false, false, 13,  2, false }; 
00070 NumStream _13_6  = { false, false, false, 13,  6, false }; 
00071 NumStream _14_6  = { false, false, false, 14,  6, false }; 
00072 NumStream _15_2  = { false, false, false, 15,  2, false }; 
00073 NumStream _15_6  = { false, false, false, 15,  6, false }; 
00074 NumStream _20_15 = { false, false, false, 20, 15, false }; 
00075 NumStream _reset = { false, false, false,  0,  0, true  }; 
00076 
00078 std::ostream & operator<< (std::ostream & os, NumStream const & NS)
00079 {
00080     if (NS.Reset)
00081     {
00082         os << std::resetiosflags(std::ios_base::scientific) << std::resetiosflags(std::ios_base::fixed) << std::resetiosflags(std::ios_base::boolalpha);
00083     }
00084     else
00085     {
00086         if      (NS.BoolAlpha)  { os<<" "<<std::setw(6)<<std::boolalpha; }
00087         else if (NS.Integer)    { os<<" "<<std::setw(NS.Width); }
00088         else if (NS.Scientific) { os<<" "<<std::setw(NS.Precision+9)<<std::scientific<<std::setprecision(NS.Precision); } // add 9
00089         else                    { os<<" "<<std::setw(NS.Width+1)<<std::fixed<<std::setprecision(NS.Precision); } // add 1 (for sign)
00090     }
00091     return os;
00092 }
00093 
00094 }; // namespace Util
00095 
00096 #endif // MECHSYS_NUMSTREAMS_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines