49 lines
		
	
	
		
			772 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			772 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef BASE_INDENTED_STREAM_H
 | |
| #define BASE_INDENTED_STREAM_H
 | |
| 
 | |
| #include <iostream>
 | |
| 
 | |
| //----------------------------------------------------------------
 | |
| 
 | |
| namespace {
 | |
| 	class indented_stream {
 | |
| 	public:
 | |
| 		indented_stream(std::ostream &out)
 | |
| 		: out_(out),
 | |
| 		  indent_(0) {
 | |
| 		}
 | |
| 
 | |
| 		void indent() {
 | |
| 			for (unsigned i = 0; i < indent_ * 2; i++)
 | |
| 				out_ << ' ';
 | |
| 		}
 | |
| 
 | |
| 		void inc() {
 | |
| 			indent_++;
 | |
| 		}
 | |
| 
 | |
| 		void dec() {
 | |
| 			indent_--;
 | |
| 		}
 | |
| 
 | |
| 		template <typename T>
 | |
| 		indented_stream &operator <<(T const &t) {
 | |
| 			out_ << t;
 | |
| 			return *this;
 | |
| 		}
 | |
| 
 | |
| 		indented_stream &operator <<(std::ostream &(*fp)(std::ostream &)) {
 | |
| 			out_ << fp;
 | |
| 			return *this;
 | |
| 		}
 | |
| 
 | |
| 	private:
 | |
| 		std::ostream &out_;
 | |
| 		unsigned indent_;
 | |
| 	};
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------
 | |
| 
 | |
| #endif
 |