X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=include%2Fc%2B%2B%2Fstl%2Fiomanip;fp=include%2Fc%2B%2B%2Fstl%2Fiomanip;h=6956190e6371c8b1380810982f860c3398773935;hp=0000000000000000000000000000000000000000;hb=173d8903eb9d51a4ea7d7fa3e52dc86c9bb6d4f1;hpb=b024710fe2b60cd4a42a8993b61333d6cdb56ca3 diff --git a/include/c++/stl/iomanip b/include/c++/stl/iomanip new file mode 100644 index 0000000..6956190 --- /dev/null +++ b/include/c++/stl/iomanip @@ -0,0 +1,175 @@ +/* + * Copyright (c) 1999 + * Silicon Graphics Computer Systems, Inc. + * + * Copyright (c) 1999 + * Boris Fomitchev + * + * This material is provided "as is", with absolutely no warranty expressed + * or implied. Any use is at your own risk. + * + * Permission to use or copy this software for any purpose is hereby granted + * without fee, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + */ + +#ifndef _STLP_IOMANIP +#define _STLP_IOMANIP + +#ifndef _STLP_OUTERMOST_HEADER_ID +# define _STLP_OUTERMOST_HEADER_ID 0x1030 +# include +#endif + +#ifdef _STLP_PRAGMA_ONCE +# pragma once +#endif + +#include +#include // Includes and + +_STLP_BEGIN_NAMESPACE + +//---------------------------------------------------------------------- +// Machinery for defining manipulators. + +// Class that calls one of ios_base's single-argument member functions. +template +struct _Ios_Manip_1 { + typedef _Arg (ios_base::*__f_ptr_type)(_Arg); + + _Ios_Manip_1(__f_ptr_type __f, const _Arg& __arg) + : _M_f(__f), _M_arg(__arg) {} + + void operator()(ios_base& __ios) const + { (__ios.*_M_f)(_M_arg); } + + __f_ptr_type _M_f; + _Arg _M_arg; +}; + +// Class that calls one of ios_base's two-argument member functions. +struct _Ios_Setf_Manip { + ios_base::fmtflags _M_flag; + ios_base::fmtflags _M_mask; + bool _M_two_args; + + _Ios_Setf_Manip(ios_base::fmtflags __f) + : _M_flag(__f), _M_mask(0), _M_two_args(false) {} + + _Ios_Setf_Manip(ios_base::fmtflags __f, ios_base::fmtflags __m) + : _M_flag(__f), _M_mask(__m), _M_two_args(true) {} + + void operator()(ios_base& __ios) const { + if (_M_two_args) + __ios.setf(_M_flag, _M_mask); + else + __ios.setf(_M_flag); + } +}; + + +template +inline basic_istream<_CharT, _Traits>& _STLP_CALL +operator>>(basic_istream<_CharT, _Traits>& __istr, + const _Ios_Manip_1<_Arg>& __f) { + __f(__istr); + return __istr; +} + +template +inline basic_ostream<_CharT, _Traits>& _STLP_CALL +operator<<(basic_ostream<_CharT, _Traits>& __os, + const _Ios_Manip_1<_Arg>& __f) { + __f(__os); + return __os; +} + +template +inline basic_istream<_CharT, _Traits>& _STLP_CALL +operator>>(basic_istream<_CharT, _Traits>& __istr, const _Ios_Setf_Manip& __f) { + __f(__istr); + return __istr; +} + +template +inline basic_ostream<_CharT, _Traits>& _STLP_CALL +operator<<(basic_ostream<_CharT, _Traits>& __os, const _Ios_Setf_Manip& __f) { + __f(__os); + return __os; +} + +//---------------------------------------------------------------------- +// The ios_base manipulators. +inline _Ios_Setf_Manip _STLP_CALL resetiosflags(ios_base::fmtflags __mask) +{ return _Ios_Setf_Manip(0, __mask); } + +inline _Ios_Setf_Manip _STLP_CALL setiosflags(ios_base::fmtflags __flag) +{ return _Ios_Setf_Manip(__flag); } + +inline _Ios_Setf_Manip _STLP_CALL setbase(int __n) { + ios_base::fmtflags __base = __n == 8 ? ios_base::oct : + __n == 10 ? ios_base::dec : + __n == 16 ? ios_base::hex : + ios_base::fmtflags(0); + return _Ios_Setf_Manip(__base, ios_base::basefield); +} + +inline _Ios_Manip_1 _STLP_CALL +setprecision(int __n) { + _Ios_Manip_1::__f_ptr_type __f = &ios_base::precision; + return _Ios_Manip_1(__f, __n); +} + +inline _Ios_Manip_1 _STLP_CALL +setw(int __n) { + _Ios_Manip_1::__f_ptr_type __f = &ios_base::width; + return _Ios_Manip_1(__f, __n); +} + +//---------------------------------------------------------------------- +// setfill, a manipulator that operates on basic_ios<> instead of ios_base. + +template +struct _Setfill_Manip { + _Setfill_Manip(_CharT __c) : _M_c(__c) {} + _CharT _M_c; +}; + +template +inline basic_ostream<_CharT, _Traits>& _STLP_CALL +operator<<(basic_ostream<_CharT, _Traits>& __os, + const _Setfill_Manip<_CharT2>& __m) { + __os.fill(__m._M_c); + return __os; +} + +template +inline basic_istream<_CharT, _Traits>& _STLP_CALL +operator>>(basic_istream<_CharT, _Traits>& __is, + const _Setfill_Manip<_CharT2>& __m) { + __is.fill(__m._M_c); + return __is; +} + +template +inline _Setfill_Manip<_CharT> _STLP_CALL +setfill(_CharT __c) { + return _Setfill_Manip<_CharT>(__c); +} + +_STLP_END_NAMESPACE + +#if (_STLP_OUTERMOST_HEADER_ID == 0x1030) +# include +# undef _STLP_OUTERMOST_HEADER_ID +#endif + +#endif /* _STLP_IOMANIP */ + +// Local Variables: +// mode:C++ +// End: