102 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //  boost/chrono/utility/manip_base.hpp  ------------------------------------------------------------//
 | |
| 
 | |
| //  Copyright 2011 Vicente J. Botet Escriba
 | |
| 
 | |
| //  Distributed under the Boost Software License, Version 1.0. (See accompanying
 | |
| //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | |
| 
 | |
| //  See http://www.boost.org/libs/chrono for documentation.
 | |
| 
 | |
| #ifndef BOOST_CHRONO_UTILITY_MANIP_BASE_PTR_HPP
 | |
| #define BOOST_CHRONO_UTILITY_MANIP_BASE_PTR_HPP
 | |
| 
 | |
| #include <ios>
 | |
| 
 | |
| /**
 | |
|  *
 | |
| 
 | |
|  */
 | |
| 
 | |
| namespace boost
 | |
| {
 | |
|   namespace chrono
 | |
|   {
 | |
| 
 | |
|     /**
 | |
|      * manip is a manipulator mixin class following the CRTP.
 | |
|      * @tparam Final the derived from manip and final type
 | |
|      *
 | |
|      * @Example
 | |
|      * @code
 | |
| 
 | |
|     class mendl: public manip<mendl>
 | |
|     {
 | |
|     public:
 | |
|       explicit mendl(size_t how_many) :
 | |
|         count(how_many) {}
 | |
|       template <typename out_stream>
 | |
|       void operator()(out_stream &out) const
 | |
|       {
 | |
|         for (size_t line = 0; line < count; ++line)
 | |
|         {
 | |
|           out.put(out.widen('\n'));
 | |
|         }
 | |
|         out.flush();
 | |
|       }
 | |
|     private:
 | |
|       size_t count;
 | |
|     };
 | |
| 
 | |
|      * @codeend
 | |
|      */
 | |
|     template <typename Final>
 | |
|     class manip
 | |
|     {
 | |
|     public:
 | |
|       /**
 | |
|        *
 | |
|        * @param ios the io stream or ios_base.
 | |
|        * @Effects calls to the manipulator final functor.
 | |
|        */
 | |
|       //template <typename out_stream>
 | |
|       void operator()(std::ios_base &ios) const
 | |
|       {
 | |
|         (*static_cast<const Final *> (this))(ios);
 | |
|       }
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * @c manip stream inserter
 | |
|      * @param out the io stream or ios_base.
 | |
|      * @param op the manipulator instance.
 | |
|      * @Effects if @c out is good calls to the manipulator functor @op.
 | |
|      * @return @c out
 | |
|      */
 | |
|     template <typename out_stream, typename manip_type>
 | |
|     out_stream &operator<<(out_stream &out, const manip<manip_type> &op)
 | |
|     {
 | |
|       if (out.good())
 | |
|         op(out);
 | |
|       return out;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @c manip stream extractor
 | |
|      * @param in the io stream or ios_base.
 | |
|      * @param op  the manipulator instance.
 | |
|      * @Effects if @c in is good calls to the manipulator functor @op.
 | |
|      * @return @c in
 | |
|      */
 | |
|     template <typename in_stream, typename manip_type>
 | |
|     in_stream &operator>>(in_stream &in, const manip<manip_type> &op)
 | |
|     {
 | |
|       if (in.good())
 | |
|         op(in);
 | |
|       return in;
 | |
|     }
 | |
| 
 | |
|   } // namespace chrono
 | |
| } // namespace boost
 | |
| 
 | |
| #endif // header
 | 
