check_consecutive.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. #ifndef CHECK_CONSECUTIVE_H
  9. #define CHECK_CONSECUTIVE_H
  10. // <unordered_multiset>
  11. // <unordered_multimap>
  12. #include <cassert>
  13. #include <set>
  14. #include <stddef.h>
  15. // Check consecutive equal values in an unordered_multiset iterator
  16. template <typename Iter>
  17. void CheckConsecutiveValues(Iter pos, Iter end, typename Iter::value_type value, size_t count)
  18. {
  19. for ( size_t i = 0; i < count; ++i )
  20. {
  21. assert(pos != end);
  22. assert(*pos == value);
  23. ++pos;
  24. }
  25. assert(pos == end || *pos != value);
  26. }
  27. // Check consecutive equal keys in an unordered_multimap iterator
  28. template <typename Iter>
  29. void CheckConsecutiveKeys(Iter pos, Iter end, typename Iter::value_type::first_type key, std::multiset<typename Iter::value_type::second_type>& values)
  30. {
  31. while (!values.empty())
  32. {
  33. assert(pos != end);
  34. assert(pos->first == key);
  35. assert(values.find(pos->second) != values.end());
  36. values.erase(values.find(pos->second));
  37. ++pos;
  38. }
  39. assert(pos == end || pos->first != key);
  40. }
  41. #endif