// -*- C++ -*- /*************************************************************************** * * iomanip - Declarations of iostream manipulators * * $Id$ * *************************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * Copyright 1994-2008 Rogue Wave Software, Inc. * **************************************************************************/ #ifndef _RWSTD_IOMANIP_INCLUDED #define _RWSTD_IOMANIP_INCLUDED #include #include #include _RWSTD_NAMESPACE (__rw) { // resetiosflags implementation struct __rw_resetiosflags { void operator() (_STD::ios_base &__strm, _STD::ios_base::fmtflags __mask) const { __strm.setf (_STD::ios_base::fmtflags (0), __mask); } }; // setiosflags implementation struct __rw_setiosflags { void operator() (_STD::ios_base &__strm, _STD::ios_base::fmtflags __mask) const { __strm.setf (__mask); } }; // setbase implementation struct __rw_setbase { void operator() (_STD::ios_base &__strm, int __base) const { #ifndef _RWSTD_NO_EXT_SETBASE if (__base < 0 || __base > 36) __base = 0; #else // if defined (_RWSTD_NO_EXT_SETBASE) switch (__base) { case 0: case 8: case 10: case 16: break; # ifndef _RWSTD_NO_EXT_BIN_IO case 2: break; # endif // _RWSTD_NO_EXT_BIN_IO default: __base = 0; } #endif // _RWSTD_NO_EXT_SETBASE const unsigned __ifl = __strm.flags () & ~_STD::ios_base::basefield & ~( _RWSTD_STATIC_CAST (unsigned, _RWSTD_IOS_BASEMASK) << _RWSTD_IOS_BASEOFF) | __base << _RWSTD_IOS_BASEOFF; __strm.flags (_STD::ios_base::fmtflags (__ifl)); } }; // setfill implementation template struct __rw_setfill { template void operator() (_STD::basic_ios<_CharT, _Traits> &__strm, _CharT __ch) const { __strm.fill (__ch); } }; // setprecision implementation struct __rw_setprecision { void operator() (_STD::ios_base &__strm, int __prec) const { __strm.precision (_RWSTD_STATIC_CAST (_RWSTD_STREAMSIZE, __prec)); } }; // setw implementation struct __rw_setw { void operator() (_STD::ios_base &__strm, int __width) const { __strm.width (_RWSTD_STATIC_CAST (_RWSTD_STREAMSIZE, __width)); } }; } // namespace __rw _RWSTD_NAMESPACE (std) { // manipulator implementation template struct __rw_smanip { explicit __rw_smanip (_TypeT __arg) : _C_fun (), _C_arg (__arg) { /* empty */ } __rw_smanip (_Functor __fun, _TypeT __arg) : _C_fun (__fun), _C_arg (__arg) { /* empty */ } _Functor _C_fun; _TypeT _C_arg; }; // 27.6.3, p3 inline __rw_smanip<_RW::__rw_resetiosflags, ios_base::fmtflags> resetiosflags (ios_base::fmtflags __mask) { return __rw_smanip<_RW::__rw_resetiosflags, ios_base::fmtflags>(__mask); } // 27.6.3, p4 inline __rw_smanip<_RW::__rw_setiosflags, ios_base::fmtflags> setiosflags (ios_base::fmtflags __mask) { return __rw_smanip<_RW::__rw_setiosflags, ios_base::fmtflags>(__mask); } // 27.6.3, p5 inline __rw_smanip<_RW::__rw_setbase, int> setbase (int __base) { return __rw_smanip<_RW::__rw_setbase, int>(__base); } // 27.6.3, p6 template inline __rw_smanip<_RW::__rw_setfill<_CharT>, _CharT> setfill (_CharT __ch) { return __rw_smanip<_RW::__rw_setfill<_CharT>, _CharT>(__ch); } // 27.6.3, p7 inline __rw_smanip<_RW::__rw_setprecision, int> setprecision (int __prec) { return __rw_smanip<_RW::__rw_setprecision, int>(__prec); } // 27.6.3, p8 inline __rw_smanip<_RW::__rw_setw, int> setw (int __width) { return __rw_smanip<_RW::__rw_setw, int>(__width); } // implementation of manipulator extractor template inline basic_istream<_CharT, _Traits>& operator>> (basic_istream<_CharT, _Traits> &__strm, const __rw_smanip<_Functor, _TypeT> &__man) { _TRY { __man._C_fun (__strm, __man._C_arg); } _CATCH (...) { __strm.setstate (ios_base::badbit); } return __strm; } // implementation of manipulator inserter template inline basic_ostream<_CharT, _Traits>& operator<< (basic_ostream<_CharT, _Traits> &__strm, const __rw_smanip<_Functor, _TypeT> &__man) { _TRY { __man._C_fun (__strm, __man._C_arg); } _CATCH (...) { __strm.setstate (ios_base::badbit); } return __strm; } } // namespace std #endif // _RWSTD_IOMANIP_INCLUDED