73 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2009-2021 Intel Corporation
 | |
| // SPDX-License-Identifier: Apache-2.0
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include "platform.h"
 | |
| #include "../math/vec2.h"
 | |
| #include "../math/vec3.h"
 | |
| #include "../math/vec4.h"
 | |
| 
 | |
| namespace embree
 | |
| {
 | |
|   class IOStreamStateRestorer 
 | |
|   {
 | |
|   public:
 | |
|     IOStreamStateRestorer(std::ostream& iostream)
 | |
|       : iostream(iostream), flags(iostream.flags()), precision(iostream.precision()) {
 | |
|     }
 | |
| 
 | |
|     ~IOStreamStateRestorer() {
 | |
|       iostream.flags(flags);
 | |
|       iostream.precision(precision);
 | |
|     }
 | |
|     
 | |
|   private:
 | |
|     std::ostream& iostream;
 | |
|     std::ios::fmtflags flags;
 | |
|     std::streamsize precision;
 | |
|   };
 | |
| 
 | |
|   struct IndentOStream : public std::streambuf
 | |
|   {
 | |
|     explicit IndentOStream(std::ostream &ostream, int indent = 2)
 | |
|       : streambuf(ostream.rdbuf())
 | |
|       , start_of_line(true)
 | |
|       , ident_str(indent, ' ')
 | |
|       , stream(&ostream)
 | |
|     {
 | |
|       // set streambuf of ostream to this and save original streambuf
 | |
|       stream->rdbuf(this);
 | |
|     }
 | |
| 
 | |
|     virtual ~IndentOStream()
 | |
|     {
 | |
|       if (stream != NULL) {
 | |
|         // restore old streambuf
 | |
|         stream->rdbuf(streambuf);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|   protected:
 | |
|     virtual int overflow(int ch) {
 | |
|       if (start_of_line && ch != '\n') {
 | |
|         streambuf->sputn(ident_str.data(), ident_str.size());
 | |
|       }
 | |
|       start_of_line = ch == '\n';
 | |
|       return streambuf->sputc(ch);
 | |
|     }
 | |
| 
 | |
|   private:
 | |
|     std::streambuf *streambuf;
 | |
|     bool start_of_line;
 | |
|     std::string ident_str;
 | |
|     std::ostream *stream;
 | |
|   };
 | |
| 
 | |
|   std::string toLowerCase(const std::string& s);
 | |
|   std::string toUpperCase(const std::string& s);
 | |
| 
 | |
|   Vec2f string_to_Vec2f ( std::string str );
 | |
|   Vec3f string_to_Vec3f ( std::string str );
 | |
|   Vec4f string_to_Vec4f ( std::string str );
 | |
| }
 |