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