xref: /freebsd/contrib/llvm-project/libcxx/include/memory_resource (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1bdd1243dSDimitry Andric// -*- C++ -*-
2bdd1243dSDimitry Andric//===----------------------------------------------------------------------===//
3bdd1243dSDimitry Andric//
4bdd1243dSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5bdd1243dSDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
6bdd1243dSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7bdd1243dSDimitry Andric//
8bdd1243dSDimitry Andric//===----------------------------------------------------------------------===//
9bdd1243dSDimitry Andric
10bdd1243dSDimitry Andric#ifndef _LIBCPP_MEMORY_RESOURCE
11bdd1243dSDimitry Andric#define _LIBCPP_MEMORY_RESOURCE
12bdd1243dSDimitry Andric
13bdd1243dSDimitry Andric/**
14bdd1243dSDimitry Andric    memory_resource synopsis
15bdd1243dSDimitry Andric
16bdd1243dSDimitry Andric// C++17
17bdd1243dSDimitry Andric
18bdd1243dSDimitry Andricnamespace std::pmr {
19bdd1243dSDimitry Andric
20bdd1243dSDimitry Andric  class memory_resource;
21bdd1243dSDimitry Andric
22bdd1243dSDimitry Andric  bool operator==(const memory_resource& a,
23bdd1243dSDimitry Andric                  const memory_resource& b) noexcept;
24bdd1243dSDimitry Andric  bool operator!=(const memory_resource& a,
2506c3fb27SDimitry Andric                  const memory_resource& b) noexcept;           // removed in C++20
26bdd1243dSDimitry Andric
27bdd1243dSDimitry Andric  template <class Tp> class polymorphic_allocator;
28bdd1243dSDimitry Andric
29bdd1243dSDimitry Andric  template <class T1, class T2>
30bdd1243dSDimitry Andric  bool operator==(const polymorphic_allocator<T1>& a,
31bdd1243dSDimitry Andric                  const polymorphic_allocator<T2>& b) noexcept;
32bdd1243dSDimitry Andric  template <class T1, class T2>
33bdd1243dSDimitry Andric  bool operator!=(const polymorphic_allocator<T1>& a,
3406c3fb27SDimitry Andric                  const polymorphic_allocator<T2>& b) noexcept; // removed in C++20
35bdd1243dSDimitry Andric
36bdd1243dSDimitry Andric  // Global memory resources
37bdd1243dSDimitry Andric  memory_resource* set_default_resource(memory_resource* r) noexcept;
38bdd1243dSDimitry Andric  memory_resource* get_default_resource() noexcept;
39bdd1243dSDimitry Andric  memory_resource* new_delete_resource() noexcept;
40bdd1243dSDimitry Andric  memory_resource* null_memory_resource() noexcept;
41bdd1243dSDimitry Andric
42bdd1243dSDimitry Andric  // Pool resource classes
43bdd1243dSDimitry Andric  struct pool_options;
44bdd1243dSDimitry Andric  class synchronized_pool_resource;
45bdd1243dSDimitry Andric  class unsynchronized_pool_resource;
46bdd1243dSDimitry Andric  class monotonic_buffer_resource;
47bdd1243dSDimitry Andric
48bdd1243dSDimitry Andric} // namespace std::pmr
49bdd1243dSDimitry Andric
50bdd1243dSDimitry Andric */
51bdd1243dSDimitry Andric
52bdd1243dSDimitry Andric#include <__config>
53*0fca6ea1SDimitry Andric
54*0fca6ea1SDimitry Andric#if _LIBCPP_STD_VER >= 17
55bdd1243dSDimitry Andric#  include <__memory_resource/memory_resource.h>
56bdd1243dSDimitry Andric#  include <__memory_resource/monotonic_buffer_resource.h>
57bdd1243dSDimitry Andric#  include <__memory_resource/polymorphic_allocator.h>
58bdd1243dSDimitry Andric#  include <__memory_resource/pool_options.h>
59bdd1243dSDimitry Andric#  include <__memory_resource/synchronized_pool_resource.h>
60bdd1243dSDimitry Andric#  include <__memory_resource/unsynchronized_pool_resource.h>
61*0fca6ea1SDimitry Andric#endif
62*0fca6ea1SDimitry Andric
63bdd1243dSDimitry Andric#include <version>
64bdd1243dSDimitry Andric
65bdd1243dSDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
66bdd1243dSDimitry Andric#  pragma GCC system_header
67bdd1243dSDimitry Andric#endif
68bdd1243dSDimitry Andric
69*0fca6ea1SDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 14
70*0fca6ea1SDimitry Andric#  include <cstddef>
71*0fca6ea1SDimitry Andric#  include <cstdint>
72*0fca6ea1SDimitry Andric#  include <limits>
73*0fca6ea1SDimitry Andric#  include <mutex>
74*0fca6ea1SDimitry Andric#  include <new>
75*0fca6ea1SDimitry Andric#  include <stdexcept>
76*0fca6ea1SDimitry Andric#  include <tuple>
77*0fca6ea1SDimitry Andric#endif
78*0fca6ea1SDimitry Andric
795f757f3fSDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
805f757f3fSDimitry Andric#  include <stdexcept>
815f757f3fSDimitry Andric#endif
825f757f3fSDimitry Andric
83bdd1243dSDimitry Andric#endif /* _LIBCPP_MEMORY_RESOURCE */
84