master
 1// -*- C++ -*-
 2//===----------------------------------------------------------------------===//
 3//
 4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 5// See https://llvm.org/LICENSE.txt for license information.
 6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 7//
 8//===----------------------------------------------------------------------===//
 9
10#ifndef _LIBCPP_FLAT_SET
11#define _LIBCPP_FLAT_SET
12
13/*
14  Header <flat_set> synopsis
15
16#include <compare>              // see [compare.syn]
17#include <initializer_list>     // see [initializer.list.syn]
18
19namespace std {
20  // [flat.set], class template flat_set
21  template<class Key, class Compare = less<Key>, class KeyContainer = vector<Key>>
22    class flat_set;
23
24  struct sorted_unique_t { explicit sorted_unique_t() = default; };
25  inline constexpr sorted_unique_t sorted_unique{};
26
27  template<class Key, class Compare, class KeyContainer, class Allocator>
28    struct uses_allocator<flat_set<Key, Compare, KeyContainer>, Allocator>;
29
30  // [flat.set.erasure], erasure for flat_set
31  template<class Key, class Compare, class KeyContainer, class Predicate>
32    typename flat_set<Key, Compare, KeyContainer>::size_type
33      erase_if(flat_set<Key, Compare, KeyContainer>& c, Predicate pred);
34
35   // [flat.multiset], class template flat_multiset
36  template<class Key, class Compare = less<Key>, class KeyContainer = vector<Key>>
37    class flat_multiset;
38
39  struct sorted_equivalent_t { explicit sorted_equivalent_t() = default; };
40  inline constexpr sorted_equivalent_t sorted_equivalent{};
41
42  template<class Key, class Compare, class KeyContainer, class Allocator>
43    struct uses_allocator<flat_multiset<Key, Compare, KeyContainer>, Allocator>;
44
45  // [flat.multiset.erasure], erasure for flat_multiset
46  template<class Key, class Compare, class KeyContainer, class Predicate>
47    typename flat_multiset<Key, Compare, KeyContainer>::size_type
48      erase_if(flat_multiset<Key, Compare, KeyContainer>& c, Predicate pred);
49}
50*/
51
52#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
53#  include <__cxx03/__config>
54#else
55#  include <__config>
56
57#  if _LIBCPP_STD_VER >= 23
58#    include <__flat_map/sorted_equivalent.h>
59#    include <__flat_map/sorted_unique.h>
60#    include <__flat_set/flat_multiset.h>
61#    include <__flat_set/flat_set.h>
62#  endif
63
64// for feature-test macros
65#  include <version>
66
67// standard required includes
68
69// [iterator.range]
70#  include <__iterator/access.h>
71#  include <__iterator/data.h>
72#  include <__iterator/empty.h>
73#  include <__iterator/reverse_access.h>
74#  include <__iterator/size.h>
75
76// [flat.set.syn]
77#  include <compare>
78#  include <initializer_list>
79
80#  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
81#    pragma GCC system_header
82#  endif
83#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
84
85#endif // _LIBCPP_FLAT_SET