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