mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 00:51:52 +01:00 
			
		
		
		
	All C++11 toggles are now removed. What is left is either platform specific (POSIX_SIGNALS, WINDOWS_SEH), or possibly still needed (USE_COUNTER). If current CLion is compatible with `__COUNTER__`, then we should also force `__COUNTER__` usage. Changed * CATCH_AUTO_PTR -> std::unique_ptr * CATCH_OVERRIDE -> override * CATCH_NULL -> nullptr * CATCH_NOEXCEPT -> noexcept * CATCH_NOEXCEPT_IS -> noexcept Removed * CATCH_CONFIG_CPP11_UNIQUE_PTR * CATCH_CONFIG_CPP11_SHUFFLE * CATCH_CONFIG_CPP11_TYPE_TRAITS * CATCH_CONFIG_CPP11_OVERRIDE * CATCH_CONFIG_CPP11_LONG_LONG * CATCH_CONFIG_CPP11_TUPLE * CATCH_CONFIG_CPP11_IS_ENUM * CATCH_CONFIG_CPP11_GENERATED_METHODS * CATCH_CONFIG_CPP11_NOEXCEPT * CATCH_CONFIG_CPP11_NULLPTR * CATCH_CONFIG_VARIADIC_MACROS
		
			
				
	
	
		
			110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 *  Created by Phil on 17/01/2011.
 | 
						|
 *  Copyright 2011 Two Blue Cubes Ltd. All rights reserved.
 | 
						|
 *
 | 
						|
 *  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)
 | 
						|
 *
 | 
						|
 */
 | 
						|
#ifndef TWOBLUECUBES_CATCH_STREAM_HPP_INCLUDED
 | 
						|
#define TWOBLUECUBES_CATCH_STREAM_HPP_INCLUDED
 | 
						|
 | 
						|
#include "catch_stream.h"
 | 
						|
#include "catch_debugger.h"
 | 
						|
 | 
						|
#include <stdexcept>
 | 
						|
#include <cstdio>
 | 
						|
#include <iostream>
 | 
						|
 | 
						|
namespace Catch {
 | 
						|
 | 
						|
    template<typename WriterF, size_t bufferSize=256>
 | 
						|
    class StreamBufImpl : public StreamBufBase {
 | 
						|
        char data[bufferSize];
 | 
						|
        WriterF m_writer;
 | 
						|
 | 
						|
    public:
 | 
						|
        StreamBufImpl() {
 | 
						|
            setp( data, data + sizeof(data) );
 | 
						|
        }
 | 
						|
 | 
						|
        ~StreamBufImpl() noexcept {
 | 
						|
            sync();
 | 
						|
        }
 | 
						|
 | 
						|
    private:
 | 
						|
        int overflow( int c ) {
 | 
						|
            sync();
 | 
						|
 | 
						|
            if( c != EOF ) {
 | 
						|
                if( pbase() == epptr() )
 | 
						|
                    m_writer( std::string( 1, static_cast<char>( c ) ) );
 | 
						|
                else
 | 
						|
                    sputc( static_cast<char>( c ) );
 | 
						|
            }
 | 
						|
            return 0;
 | 
						|
        }
 | 
						|
 | 
						|
        int sync() {
 | 
						|
            if( pbase() != pptr() ) {
 | 
						|
                m_writer( std::string( pbase(), static_cast<std::string::size_type>( pptr() - pbase() ) ) );
 | 
						|
                setp( pbase(), epptr() );
 | 
						|
            }
 | 
						|
            return 0;
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    ///////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
    FileStream::FileStream( std::string const& filename ) {
 | 
						|
        m_ofs.open( filename.c_str() );
 | 
						|
        if( m_ofs.fail() ) {
 | 
						|
            std::ostringstream oss;
 | 
						|
            oss << "Unable to open file: '" << filename << '\'';
 | 
						|
            throw std::domain_error( oss.str() );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    std::ostream& FileStream::stream() const {
 | 
						|
        return m_ofs;
 | 
						|
    }
 | 
						|
 | 
						|
    struct OutputDebugWriter {
 | 
						|
 | 
						|
        void operator()( std::string const&str ) {
 | 
						|
            writeToDebugConsole( str );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    DebugOutStream::DebugOutStream()
 | 
						|
    :   m_streamBuf( new StreamBufImpl<OutputDebugWriter>() ),
 | 
						|
        m_os( m_streamBuf.get() )
 | 
						|
    {}
 | 
						|
 | 
						|
    std::ostream& DebugOutStream::stream() const {
 | 
						|
        return m_os;
 | 
						|
    }
 | 
						|
 | 
						|
    // Store the streambuf from cout up-front because
 | 
						|
    // cout may get redirected when running tests
 | 
						|
    CoutStream::CoutStream()
 | 
						|
    :   m_os( Catch::cout().rdbuf() )
 | 
						|
    {}
 | 
						|
 | 
						|
    std::ostream& CoutStream::stream() const {
 | 
						|
        return m_os;
 | 
						|
    }
 | 
						|
 | 
						|
#ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement these functions
 | 
						|
    std::ostream& cout() {
 | 
						|
        return std::cout;
 | 
						|
    }
 | 
						|
    std::ostream& cerr() {
 | 
						|
        return std::cerr;
 | 
						|
    }
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
#endif // TWOBLUECUBES_CATCH_STREAM_HPP_INCLUDED
 |