// -*- C++ -*- // This is part of the iostream library, providing parametrized manipulators // Written by Heinz G. Seidl, Copyright (C) 1992 Cygnus Support // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free // Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // // $Id: iomanip.h,v 1.1 1995/10/18 08:38:13 deraadt Exp $ #ifndef _IOMANIP_H // // Not specifying `pragma interface' causes the compiler to emit the // template definitions in the files, where they are used. // //#ifdef __GNUG__ //#pragma interface //#endif #define _IOMANIP_H #include <_G_config.h> #ifndef _G_NO_TEMPLATES #include //----------------------------------------------------------------------------- // Parametrized Manipulators as specified by ANSI draft //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Stream Manipulators //----------------------------------------------------------------------------- // template class smanip; // TP = Type Param template class sapp { ios& (*_f)(ios&, TP); public: sapp(ios& (*f)(ios&, TP)) : _f(f) {} // smanip operator()(TP a) { return smanip(_f, a); } }; template class smanip { ios& (*_f)(ios&, TP); TP _a; public: smanip(ios& (*f)(ios&, TP), TP a) : _f(f), _a(a) {} // friend istream& operator>>(istream& i, const smanip& m); friend ostream& operator<<(ostream& o, const smanip& m); }; template inline istream& operator>>(istream& i, const smanip& m) { (*m._f)(i, m._a); return i; } template inline ostream& operator<<(ostream& o, const smanip& m) { (*m._f)(o, m._a); return o;} //----------------------------------------------------------------------------- // Input-Stream Manipulators //----------------------------------------------------------------------------- // template class imanip; template class iapp { istream& (*_f)(istream&, TP); public: iapp(ostream& (*f)(istream&,TP)) : _f(f) {} // imanip operator()(TP a) { return imanip(_f, a); } }; template class imanip { istream& (*_f)(istream&, TP); TP _a; public: imanip(istream& (*f)(istream&, TP), TP a) : _f(f), _a(a) {} // friend istream& operator>>(istream& i, const imanip& m) { return (*m._f)( i, m._a); } }; //----------------------------------------------------------------------------- // Output-Stream Manipulators //----------------------------------------------------------------------------- // template class omanip; template class oapp { ostream& (*_f)(ostream&, TP); public: oapp(ostream& (*f)(ostream&,TP)) : _f(f) {} // omanip operator()(TP a) { return omanip(_f, a); } }; template class omanip { ostream& (*_f)(ostream&, TP); TP _a; public: omanip(ostream& (*f)(ostream&, TP), TP a) : _f(f), _a(a) {} // friend ostream& operator<<(ostream& o, omanip& m) { return (*m._f)(o, m._a); } }; //----------------------------------------------------------------------------- // Available Manipulators //----------------------------------------------------------------------------- // // Macro to define an iomanip function, with one argument // The underlying function is `__iomanip_' // #define __DEFINE_IOMANIP_FN1(type,param,function) \ extern ios& __iomanip_##function (ios&, param); \ inline type function (param n) \ { return type (__iomanip_##function, n); } __DEFINE_IOMANIP_FN1( smanip, int, setbase) __DEFINE_IOMANIP_FN1( smanip, int, setfill) __DEFINE_IOMANIP_FN1( smanip, int, setprecision) __DEFINE_IOMANIP_FN1( smanip, int, setw) __DEFINE_IOMANIP_FN1( smanip, ios::fmtflags, resetiosflags) __DEFINE_IOMANIP_FN1( smanip, ios::fmtflags, setiosflags) #endif /*!_G_NO_TEMPLATES*/ #endif /*!_IOMANIP_H*/