Difference between revisions of "cpp/experimental/resource adaptor"
(Create. Could probably use some polishing) |
m |
||
(11 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{title|{{small|std::experimental::pmr::}}resource_adaptor, {{small|std::pmr::experimental::}}resource_adaptor}} |
{{cpp/experimental/lib extensions/pmr/navbar}} | {{cpp/experimental/lib extensions/pmr/navbar}} | ||
+ | {{dcl begin}} | ||
+ | {{dcl header | experimental/memory_resource}} | ||
+ | {{dcl | since=libfund_ts | 1= | ||
+ | template< class Alloc > | ||
+ | using resource_adaptor = /*resource-adaptor-imp*/< | ||
+ | typename std::allocator_traits<Alloc>:: | ||
+ | template rebind_alloc<char>>; | ||
+ | }} | ||
+ | {{dcl | since=libfund_ts | | ||
+ | template< class Alloc > | ||
+ | class /*resource-adaptor-imp*/ : public memory_resource; // for exposition only | ||
+ | }} | ||
+ | {{dcl end}} | ||
− | {{ | + | The alias template {{tt|resource_adaptor}} adapts the allocator type {{tt|Alloc}} with a {{tt|memory_resource}} interface. The allocator is rebound to a {{tt|char}} value type before it is actually adapted (using the ''{{tt|resource-adaptor-imp}}'' class template), so that adapting specializations of the same allocator template always yields the same type, regardless of the value type the allocator template is originally instantiated with. |
− | + | ||
− | + | ||
− | + | {{rrev multi | |
− | + | |since1=libfund_ts|rev1= | |
− | + | {{tt|resource_adaptor}} is defined in namespace {{tt|std::experimental::pmr}}, and the base type {{tt|memory_resorce}} in this page is {{lc|std::experimental::pmr::memory_resource}}. | |
− | + | |since2=libfund_ts_3|rev2= | |
+ | {{tt|resource_adaptor}} is defined in namespace {{tt|std::pmr::experimental}}, and the base type {{tt|memory_resorce}} in this page is {{lc|std::pmr::memory_resource}}. | ||
}} | }} | ||
− | + | ''{{tt|resource-adaptor-imp}}'' is a class template whose members are described below. The name ''{{tt|resource-adaptor-imp}}'' is for exposition purposes only and not normative. | |
+ | |||
+ | In addition to meeting the {{named req|Allocator}} requirements, {{tt|Alloc}} must additionally satisfy the following requirements: | ||
+ | |||
+ | * {{c|std::allocator_traits<Alloc>::pointer}} shall be identical to {{c|Alloc::value_type*}}. | ||
+ | * {{c|std::allocator_traits<Alloc>::const_pointer}} shall be identical to {{c|Alloc::value_type const*}}. | ||
+ | * {{c|std::allocator_traits<Alloc>::void_pointer}} shall be identical to {{c|void*}}. | ||
+ | * {{c|std::allocator_traits<Alloc>::const_const_pointer}} shall be identical to {{c|void const*}}. | ||
− | === Member types of '' | + | ===Member types of ''resource-adaptor-imp''=== |
{{dsc begin}} | {{dsc begin}} | ||
{{dsc hitem| Member type | Definition}} | {{dsc hitem| Member type | Definition}} | ||
Line 20: | Line 39: | ||
{{dsc end}} | {{dsc end}} | ||
− | === Member functions of '' | + | ===Member functions of ''resource-adaptor-imp''=== |
− | {{member|{{small| | + | {{member|{{small|''resource-adaptor-imp''::}}''resource-adaptor-imp'' |
| | | | ||
{{dcl begin}} | {{dcl begin}} | ||
{{dcl| num = 1 | since=libfund_ts |1= | {{dcl| num = 1 | since=libfund_ts |1= | ||
− | + | /*resource-adaptor-imp*/() = default; | |
}} | }} | ||
{{dcl | num = 2 | since=libfund_ts |1= | {{dcl | num = 2 | since=libfund_ts |1= | ||
− | + | /*resource-adaptor-imp*/(const /*resource-adaptor-imp*/& other) | |
+ | = default; | ||
}} | }} | ||
{{dcl | num = 3 | since=libfund_ts |1= | {{dcl | num = 3 | since=libfund_ts |1= | ||
− | + | /*resource-adaptor-imp*/(/*resource-adaptor-imp*/&& other) | |
+ | = default; | ||
}} | }} | ||
{{dcl | num = 4 | since=libfund_ts |1= | {{dcl | num = 4 | since=libfund_ts |1= | ||
− | + | explicit /*resource-adaptor-imp*/(const Alloc& a2); | |
}} | }} | ||
{{dcl | num = 5 | since=libfund_ts |1= | {{dcl | num = 5 | since=libfund_ts |1= | ||
− | + | explicit /*resource-adaptor-imp*/(Alloc&& a2); | |
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
Line 48: | Line 69: | ||
====Parameters==== | ====Parameters==== | ||
{{par begin}} | {{par begin}} | ||
− | {{par | other | another ''{{tt| | + | {{par | other | another ''{{tt|resource-adaptor-imp}}'' object to copy or move from }} |
− | {{par | a2 | another {{tt| | + | {{par | a2 | another {{tt|Alloc}} object to copy or move from }} |
{{par end}} | {{par end}} | ||
}} | }} | ||
− | {{member|{{small| | + | {{member|{{small|''resource-adaptor-imp''::}}get_allocator |
| | | | ||
{{ddcl | since=libfund_ts |1= | {{ddcl | since=libfund_ts |1= | ||
− | + | allocator_type get_allocator() const; | |
}} | }} | ||
Returns a copy of the wrapped allocator. | Returns a copy of the wrapped allocator. | ||
}} | }} | ||
− | {{member|{{small| | + | {{member|{{small|''resource-adaptor-imp''::}}operator{{=}} |
| | | | ||
{{ddcl | since=libfund_ts |1= | {{ddcl | since=libfund_ts |1= | ||
− | + | /*resource-adaptor-imp*/& operator=(const /*resource-adaptor-imp*/& other) | |
+ | = default; | ||
}} | }} | ||
Defaulted copy assignment operator. Copy assigns the wrapped allocator from that of {{tt|other}}. | Defaulted copy assignment operator. Copy assigns the wrapped allocator from that of {{tt|other}}. | ||
}} | }} | ||
− | {{member|{{small| | + | {{member|{{small|''resource-adaptor-imp''::}}do_allocate |
| | | | ||
{{ddcl | since=libfund_ts |1= | {{ddcl | since=libfund_ts |1= | ||
− | + | protected: | |
+ | virtual void* do_allocate(std::size_t bytes, std::size_t alignment); | ||
}} | }} | ||
Allocates memory using the {{tt|allocate}} member function of the wrapped allocator. | Allocates memory using the {{tt|allocate}} member function of the wrapped allocator. | ||
}} | }} | ||
− | {{member|{{small| | + | {{member|{{small|''resource-adaptor-imp''::}}do_deallocate |
| | | | ||
− | {{ddcl | since=libfund_ts | | + | {{ddcl | since=libfund_ts | |
− | + | protected: | |
+ | virtual void do_deallocate(void *p, std::size_t bytes, std::size_t alignment); | ||
}} | }} | ||
− | Deallocates the storage pointed to by {{tt|p}} using the {{tt|deallocate}} member function of the wrapped allocator. {{tt|p}} must have been allocated using the {{tt|allocate}} member function of an allocator that compares equal to the wrapped allocator, and must not have been subsequently deallocated. | + | Deallocates the storage pointed to by {{tt|p}} using the {{tt|deallocate}} member function of the wrapped allocator. |
+ | |||
+ | {{tt|p}} must have been allocated using the {{tt|allocate}} member function of an allocator that compares equal to the wrapped allocator, and must not have been subsequently deallocated. | ||
}} | }} | ||
− | {{member|{{small| | + | {{member|{{small|''resource-adaptor-imp''::}}do_is_equal |
| | | | ||
− | {{ddcl | since=libfund_ts | | + | {{ddcl | since=libfund_ts | |
− | + | protected: | |
+ | virtual bool do_is_equal(const memory_resource& other) const noexcept; | ||
}} | }} | ||
− | Let {{tt|p}} be {{c|dynamic_cast<const | + | Let {{tt|p}} be {{c|dynamic_cast<const /*resource-adaptor-imp*/*>(&other)}}. If {{tt|p}} is a null pointer value, returns {{c|false}}. Otherwise, return the result of comparing the allocators wrapped by {{c|*p}} and {{c|*this}} using {{c|1=operator==}}. |
− | + | ||
}} | }} | ||
+ | |||
+ | {{langlinks|de|es|ja|ru|zh}} |
Latest revision as of 18:20, 9 April 2023
Defined in header <experimental/memory_resource>
|
||
template< class Alloc > using resource_adaptor = /*resource-adaptor-imp*/< |
(library fundamentals TS) | |
template< class Alloc > class /*resource-adaptor-imp*/ : public memory_resource; // for exposition only |
(library fundamentals TS) | |
The alias template resource_adaptor
adapts the allocator type Alloc
with a memory_resource
interface. The allocator is rebound to a char
value type before it is actually adapted (using the resource-adaptor-imp
class template), so that adapting specializations of the same allocator template always yields the same type, regardless of the value type the allocator template is originally instantiated with.
|
(library fundamentals TS) (until library fundamentals TS v3) |
|
(library fundamentals TS v3) |
resource-adaptor-imp
is a class template whose members are described below. The name resource-adaptor-imp
is for exposition purposes only and not normative.
In addition to meeting the Allocator requirements, Alloc
must additionally satisfy the following requirements:
- std::allocator_traits<Alloc>::pointer shall be identical to Alloc::value_type*.
- std::allocator_traits<Alloc>::const_pointer shall be identical to Alloc::value_type const*.
- std::allocator_traits<Alloc>::void_pointer shall be identical to void*.
- std::allocator_traits<Alloc>::const_const_pointer shall be identical to void const*.
[edit] Member types of resource-adaptor-imp
Member type | Definition |
allocator_type
|
Alloc
|
[edit] Member functions of resource-adaptor-imp
resource-adaptor-imp::resource-adaptor-imp
/*resource-adaptor-imp*/() = default; |
(1) | (library fundamentals TS) |
/*resource-adaptor-imp*/(const /*resource-adaptor-imp*/& other) = default; |
(2) | (library fundamentals TS) |
/*resource-adaptor-imp*/(/*resource-adaptor-imp*/&& other) = default; |
(3) | (library fundamentals TS) |
explicit /*resource-adaptor-imp*/(const Alloc& a2); |
(4) | (library fundamentals TS) |
explicit /*resource-adaptor-imp*/(Alloc&& a2); |
(5) | (library fundamentals TS) |
other
.other
.a2
.Parameters
other | - | another resource-adaptor-imp object to copy or move from
|
a2 | - | another Alloc object to copy or move from
|
resource-adaptor-imp::get_allocator
allocator_type get_allocator() const; |
(library fundamentals TS) | |
Returns a copy of the wrapped allocator.
resource-adaptor-imp::operator=
/*resource-adaptor-imp*/& operator=(const /*resource-adaptor-imp*/& other) = default; |
(library fundamentals TS) | |
Defaulted copy assignment operator. Copy assigns the wrapped allocator from that of other
.
resource-adaptor-imp::do_allocate
protected: virtual void* do_allocate(std::size_t bytes, std::size_t alignment); |
(library fundamentals TS) | |
Allocates memory using the allocate
member function of the wrapped allocator.
resource-adaptor-imp::do_deallocate
protected: virtual void do_deallocate(void *p, std::size_t bytes, std::size_t alignment); |
(library fundamentals TS) | |
Deallocates the storage pointed to by p
using the deallocate
member function of the wrapped allocator.
p
must have been allocated using the allocate
member function of an allocator that compares equal to the wrapped allocator, and must not have been subsequently deallocated.
resource-adaptor-imp::do_is_equal
protected: virtual bool do_is_equal(const memory_resource& other) const noexcept; |
(library fundamentals TS) | |
Let p
be dynamic_cast<const /*resource-adaptor-imp*/*>(&other). If p
is a null pointer value, returns false. Otherwise, return the result of comparing the allocators wrapped by *p and *this using operator==.