forked from catchorg/Catch2
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 *  Created by Phil on 28/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_GENERATORS_IMPL_HPP_INCLUDED
 | 
						|
#define TWOBLUECUBES_CATCH_GENERATORS_IMPL_HPP_INCLUDED
 | 
						|
 | 
						|
#include "catch_interfaces_generators.h"
 | 
						|
 | 
						|
#include "catch_common.h"
 | 
						|
 | 
						|
#include <vector>
 | 
						|
#include <string>
 | 
						|
#include <map>
 | 
						|
 | 
						|
namespace Catch {
 | 
						|
 | 
						|
    struct GeneratorInfo : IGeneratorInfo {
 | 
						|
 | 
						|
        GeneratorInfo( std::size_t size )
 | 
						|
        :   m_size( size ),
 | 
						|
            m_currentIndex( 0 )
 | 
						|
        {}
 | 
						|
 | 
						|
        bool moveNext() {
 | 
						|
            if( ++m_currentIndex == m_size ) {
 | 
						|
                m_currentIndex = 0;
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
        std::size_t getCurrentIndex() const {
 | 
						|
            return m_currentIndex;
 | 
						|
        }
 | 
						|
 | 
						|
        std::size_t m_size;
 | 
						|
        std::size_t m_currentIndex;
 | 
						|
    };
 | 
						|
 | 
						|
    ///////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
    class GeneratorsForTest : public IGeneratorsForTest {
 | 
						|
 | 
						|
    public:
 | 
						|
        ~GeneratorsForTest() {
 | 
						|
            deleteAll( m_generatorsInOrder );
 | 
						|
        }
 | 
						|
 | 
						|
        IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) {
 | 
						|
            std::map<std::string, IGeneratorInfo*>::const_iterator it = m_generatorsByName.find( fileInfo );
 | 
						|
            if( it == m_generatorsByName.end() ) {
 | 
						|
                IGeneratorInfo* info = new GeneratorInfo( size );
 | 
						|
                m_generatorsByName.insert( std::make_pair( fileInfo, info ) );
 | 
						|
                m_generatorsInOrder.push_back( info );
 | 
						|
                return *info;
 | 
						|
            }
 | 
						|
            return *it->second;
 | 
						|
        }
 | 
						|
 | 
						|
        bool moveNext() {
 | 
						|
            std::vector<IGeneratorInfo*>::const_iterator it = m_generatorsInOrder.begin();
 | 
						|
            std::vector<IGeneratorInfo*>::const_iterator itEnd = m_generatorsInOrder.end();
 | 
						|
            for(; it != itEnd; ++it ) {
 | 
						|
                if( (*it)->moveNext() )
 | 
						|
                    return true;
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
    private:
 | 
						|
        std::map<std::string, IGeneratorInfo*> m_generatorsByName;
 | 
						|
        std::vector<IGeneratorInfo*> m_generatorsInOrder;
 | 
						|
    };
 | 
						|
 | 
						|
    IGeneratorsForTest* createGeneratorsForTest()
 | 
						|
    {
 | 
						|
        return new GeneratorsForTest();
 | 
						|
    }
 | 
						|
 | 
						|
} // end namespace Catch
 | 
						|
 | 
						|
#endif // TWOBLUECUBES_CATCH_GENERATORS_IMPL_HPP_INCLUDED
 |