You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							70 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							70 lines
						
					
					
						
							2.6 KiB
						
					
					
				| // ---------------------------------------------------------------------------- | |
| // free_funcs.hpp :  implementation of the free functions of boost::format | |
| // ---------------------------------------------------------------------------- | |
|  | |
| //  Copyright Samuel Krempp 2003. Use, modification, and distribution are | |
| //  subject to 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/format for library home page | |
|  | |
| // ---------------------------------------------------------------------------- | |
|  | |
| #ifndef BOOST_FORMAT_FUNCS_HPP | |
| #define BOOST_FORMAT_FUNCS_HPP | |
|  | |
| #include <boost/format/format_class.hpp> | |
| #include <boost/throw_exception.hpp> | |
|  | |
| namespace boost { | |
| 
 | |
|     template<class Ch, class Tr, class Alloc> inline  | |
|     std::basic_string<Ch, Tr, Alloc> str(const basic_format<Ch, Tr, Alloc>& f) { | |
|         // adds up all pieces of strings and converted items, and return the formatted string | |
|         return f.str(); | |
|     } | |
|     namespace io { | |
|          using ::boost::str; // keep compatibility with when it was defined in this N.S. | |
|     }   // - namespace io | |
|  | |
| #ifndef  BOOST_NO_TEMPLATE_STD_STREAM | |
|         template<class Ch, class Tr, class Alloc> | |
|         std::basic_ostream<Ch, Tr> &  | |
|         operator<<( std::basic_ostream<Ch, Tr> & os, | |
|                     const basic_format<Ch, Tr, Alloc>& f) | |
| #else | |
|         template<class Ch, class Tr, class Alloc> | |
|         std::ostream &  | |
|         operator<<( std::ostream & os, | |
|                     const basic_format<Ch, Tr, Alloc>& f) | |
| #endif | |
|         // effect: "return os << str(f);" but we can do it faster | |
|     { | |
|         typedef boost::basic_format<Ch, Tr, Alloc>   format_t; | |
|         if(f.items_.size()==0)  | |
|             os << f.prefix_; | |
|         else { | |
|             if(f.cur_arg_ < f.num_args_) | |
|                 if( f.exceptions() & io::too_few_args_bit ) | |
|                     // not enough variables supplied | |
|                     boost::throw_exception(io::too_few_args(f.cur_arg_, f.num_args_));  | |
|             if(f.style_ & format_t::special_needs)  | |
|                 os << f.str(); | |
|             else { | |
|                 // else we dont have to count chars output, so we dump directly to os : | |
|                 os << f.prefix_; | |
|                 for(unsigned long i=0; i<f.items_.size(); ++i) { | |
|                     const typename format_t::format_item_t& item = f.items_[i]; | |
|                     os << item.res_; | |
|                     os << item.appendix_; | |
|                 } | |
|             } | |
|         } | |
|         f.dumped_=true; | |
|         return os; | |
|     } | |
| 
 | |
| } // namespace boost | |
|  | |
| 
 | |
| #endif // BOOST_FORMAT_FUNCS_HPP
 | |
| 
 |