mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Sections use vector instead of a map
Uses brute-force search, but only ever for small vectors
This commit is contained in:
		@@ -51,19 +51,15 @@ namespace Catch {
 | 
			
		||||
        typename ContainerT::const_iterator it = container.begin();
 | 
			
		||||
        typename ContainerT::const_iterator itEnd = container.end();
 | 
			
		||||
        for(; it != itEnd; ++it )
 | 
			
		||||
        {
 | 
			
		||||
            delete *it;
 | 
			
		||||
    }
 | 
			
		||||
    }
 | 
			
		||||
    template<typename AssociativeContainerT>
 | 
			
		||||
    inline void deleteAllValues( AssociativeContainerT& container ) {
 | 
			
		||||
        typename AssociativeContainerT::const_iterator it = container.begin();
 | 
			
		||||
        typename AssociativeContainerT::const_iterator itEnd = container.end();
 | 
			
		||||
        for(; it != itEnd; ++it )
 | 
			
		||||
        {
 | 
			
		||||
            delete it->second;
 | 
			
		||||
    }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    template<typename ContainerT, typename Function>
 | 
			
		||||
    inline void forEach( ContainerT& container, Function function ) {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,8 @@ namespace Catch {
 | 
			
		||||
    class SectionInfo : ISectionInfo {
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
        typedef std::vector<SectionInfo*> SubSections;
 | 
			
		||||
    
 | 
			
		||||
        enum State {
 | 
			
		||||
            Root,
 | 
			
		||||
            Unknown,
 | 
			
		||||
@@ -46,7 +48,7 @@ namespace Catch {
 | 
			
		||||
        {}
 | 
			
		||||
        
 | 
			
		||||
        ~SectionInfo() {
 | 
			
		||||
            deleteAllValues( m_subSections );
 | 
			
		||||
            deleteAll( m_subSections );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        virtual std::string getName() const {
 | 
			
		||||
@@ -68,13 +70,11 @@ namespace Catch {
 | 
			
		||||
        bool hasUntestedSections() const {
 | 
			
		||||
            if( m_state == Unknown )
 | 
			
		||||
                return true;
 | 
			
		||||
            
 | 
			
		||||
            std::map<std::string, SectionInfo*>::const_iterator it = m_subSections.begin();
 | 
			
		||||
            std::map<std::string, SectionInfo*>::const_iterator itEnd = m_subSections.end();
 | 
			
		||||
            for(; it != itEnd; ++it ) {
 | 
			
		||||
                if( it->second->hasUntestedSections() )
 | 
			
		||||
            for(    SubSections::const_iterator it = m_subSections.begin();
 | 
			
		||||
                    it != m_subSections.end();
 | 
			
		||||
                    ++it)
 | 
			
		||||
                if( (*it)->hasUntestedSections() )
 | 
			
		||||
                    return true;
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -85,11 +85,13 @@ namespace Catch {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SectionInfo* findOrAddSubSection( const std::string& name, bool& changed ) {
 | 
			
		||||
            std::map<std::string, SectionInfo*>::const_iterator it = m_subSections.find( name );
 | 
			
		||||
            if( it != m_subSections.end() )
 | 
			
		||||
                return it->second;
 | 
			
		||||
            for(    SubSections::const_iterator it = m_subSections.begin();
 | 
			
		||||
                    it != m_subSections.end();
 | 
			
		||||
                    ++it)
 | 
			
		||||
                if( (*it)->getName() == name )
 | 
			
		||||
                    return *it;
 | 
			
		||||
            SectionInfo* subSection = new SectionInfo( this, name );
 | 
			
		||||
            m_subSections.insert( std::make_pair( name, subSection ) );
 | 
			
		||||
            m_subSections.push_back( subSection );
 | 
			
		||||
            m_state = Branch;
 | 
			
		||||
            changed = true;
 | 
			
		||||
            return subSection;
 | 
			
		||||
@@ -112,7 +114,7 @@ namespace Catch {
 | 
			
		||||
        State m_state;
 | 
			
		||||
        SectionInfo* m_parent;
 | 
			
		||||
        std::string m_name;
 | 
			
		||||
        std::map<std::string, SectionInfo*> m_subSections;
 | 
			
		||||
        SubSections m_subSections;
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user