forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | 
						|
// See https://llvm.org/LICENSE.txt for license information.
 | 
						|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
#ifndef CHECK_CONSECUTIVE_H
 | 
						|
#define CHECK_CONSECUTIVE_H
 | 
						|
 | 
						|
// <unordered_multiset>
 | 
						|
// <unordered_multimap>
 | 
						|
 | 
						|
#include <cassert>
 | 
						|
#include <set>
 | 
						|
#include <stddef.h>
 | 
						|
 | 
						|
// Check consecutive equal values in an unordered_multiset iterator
 | 
						|
template <typename Iter>
 | 
						|
void CheckConsecutiveValues(Iter pos, Iter end, typename Iter::value_type value, size_t count)
 | 
						|
{
 | 
						|
    for ( size_t i = 0; i < count; ++i )
 | 
						|
    {
 | 
						|
        assert(pos != end);
 | 
						|
        assert(*pos == value);
 | 
						|
        ++pos;
 | 
						|
    }
 | 
						|
    assert(pos == end || *pos != value);
 | 
						|
}
 | 
						|
 | 
						|
// Check consecutive equal keys in an unordered_multimap iterator
 | 
						|
template <typename Iter>
 | 
						|
void CheckConsecutiveKeys(Iter pos, Iter end, typename Iter::value_type::first_type key, std::multiset<typename Iter::value_type::second_type>& values)
 | 
						|
{
 | 
						|
    while (!values.empty())
 | 
						|
    {
 | 
						|
        assert(pos != end);
 | 
						|
        assert(pos->first == key);
 | 
						|
        assert(values.find(pos->second) != values.end());
 | 
						|
        values.erase(values.find(pos->second));
 | 
						|
        ++pos;
 | 
						|
    }
 | 
						|
    assert(pos == end || pos->first != key);
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |