xref: /llvm-project/libcxx/include/flat_map (revision def50f701f6a2c1e0550bb341fd8b64bed299e72)
10be1883cSHui// -*- C++ -*-
20be1883cSHui//===----------------------------------------------------------------------===//
30be1883cSHui//
40be1883cSHui// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
50be1883cSHui// See https://llvm.org/LICENSE.txt for license information.
60be1883cSHui// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
70be1883cSHui//
80be1883cSHui//===----------------------------------------------------------------------===//
90be1883cSHui
100be1883cSHui#ifndef _LIBCPP_FLAT_MAP
110be1883cSHui#define _LIBCPP_FLAT_MAP
120be1883cSHui
130be1883cSHui/*
140be1883cSHui  Header <flat_map> synopsis
150be1883cSHui
160be1883cSHui#include <compare>              // see [compare.syn]
170be1883cSHui#include <initializer_list>     // see [initializer.list.syn]
180be1883cSHui
190be1883cSHuinamespace std {
200be1883cSHui  // [flat.map], class template flat_map
210be1883cSHui  template<class Key, class T, class Compare = less<Key>,
220be1883cSHui           class KeyContainer = vector<Key>, class MappedContainer = vector<T>>
230be1883cSHui    class flat_map;
240be1883cSHui
250be1883cSHui  struct sorted_unique_t { explicit sorted_unique_t() = default; };
260be1883cSHui  inline constexpr sorted_unique_t sorted_unique{};
270be1883cSHui
280be1883cSHui  template<class Key, class T, class Compare, class KeyContainer, class MappedContainer,
290be1883cSHui           class Allocator>
300be1883cSHui    struct uses_allocator<flat_map<Key, T, Compare, KeyContainer, MappedContainer>,
310be1883cSHui                          Allocator>;
320be1883cSHui
330be1883cSHui  // [flat.map.erasure], erasure for flat_map
340be1883cSHui  template<class Key, class T, class Compare, class KeyContainer, class MappedContainer,
350be1883cSHui           class Predicate>
360be1883cSHui    typename flat_map<Key, T, Compare, KeyContainer, MappedContainer>::size_type
370be1883cSHui      erase_if(flat_map<Key, T, Compare, KeyContainer, MappedContainer>& c, Predicate pred);
38*def50f70SHui
39*def50f70SHui  // [flat.multimap], class template flat_multimap
40*def50f70SHui  template<class Key, class T, class Compare = less<Key>,
41*def50f70SHui           class KeyContainer = vector<Key>, class MappedContainer = vector<T>>
42*def50f70SHui    class flat_multimap;
43*def50f70SHui
44*def50f70SHui  struct sorted_equivalent_t { explicit sorted_equivalent_t() = default; };
45*def50f70SHui  inline constexpr sorted_equivalent_t sorted_equivalent{};
46*def50f70SHui
47*def50f70SHui  template<class Key, class T, class Compare, class KeyContainer, class MappedContainer,
48*def50f70SHui           class Allocator>
49*def50f70SHui    struct uses_allocator<flat_multimap<Key, T, Compare, KeyContainer, MappedContainer>,
50*def50f70SHui                          Allocator>;
51*def50f70SHui
52*def50f70SHui  // [flat.multimap.erasure], erasure for flat_multimap
53*def50f70SHui  template<class Key, class T, class Compare, class KeyContainer, class MappedContainer,
54*def50f70SHui           class Predicate>
55*def50f70SHui    typename flat_multimap<Key, T, Compare, KeyContainer, MappedContainer>::size_type
56*def50f70SHui      erase_if(flat_multimap<Key, T, Compare, KeyContainer, MappedContainer>& c, Predicate pred);
570be1883cSHui*/
580be1883cSHui
59b9a2658aSNikolas Klauser#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
60b9a2658aSNikolas Klauser#  include <__cxx03/__config>
61b9a2658aSNikolas Klauser#else
620be1883cSHui#  include <__config>
634b8bf6aaSLouis Dionne
644b8bf6aaSLouis Dionne#  if _LIBCPP_STD_VER >= 23
650be1883cSHui#    include <__flat_map/flat_map.h>
66*def50f70SHui#    include <__flat_map/flat_multimap.h>
67*def50f70SHui#    include <__flat_map/sorted_equivalent.h>
680be1883cSHui#    include <__flat_map/sorted_unique.h>
694b8bf6aaSLouis Dionne#  endif
704b8bf6aaSLouis Dionne
714b8bf6aaSLouis Dionne// for feature-test macros
720be1883cSHui#  include <version>
730be1883cSHui
740be1883cSHui// standard required includes
750be1883cSHui#  include <compare>
760be1883cSHui#  include <initializer_list>
770be1883cSHui
780be1883cSHui#  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
790be1883cSHui#    pragma GCC system_header
800be1883cSHui#  endif
81b9a2658aSNikolas Klauser#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
820be1883cSHui
830be1883cSHui#endif // _LIBCPP_FLAT_MAP
84