AWS IoT Device SDK C++ v2 1.44.2
AWS IoT Device SDK C++ v2
Loading...
Searching...
No Matches
StlAllocator.h
Go to the documentation of this file.
1#pragma once
6
7#include <aws/crt/Allocator.h>
8
9#include <memory>
10#include <type_traits>
11
12namespace Aws
13{
14 namespace Crt
15 {
20 template <typename T> class StlAllocator : public std::allocator<T>
21 {
22 public:
23 using Base = std::allocator<T>;
24
25 StlAllocator() noexcept : Base() { m_allocator = ApiAllocator(); }
26
27 StlAllocator(Allocator *allocator) noexcept : Base() { m_allocator = allocator; }
28
29 StlAllocator(const StlAllocator<T> &a) noexcept : Base(a) { m_allocator = a.m_allocator; }
30
31 template <class U> StlAllocator(const StlAllocator<U> &a) noexcept : Base(a)
32 {
33 m_allocator = a.m_allocator;
34 }
35
37
38 using size_type = std::size_t;
39
40 template <typename U> struct rebind
41 {
43 };
44
45 using RawPointer = typename std::allocator_traits<std::allocator<T>>::pointer;
46
47 RawPointer allocate(size_type n, const void *hint = nullptr)
48 {
49 (void)hint;
50 AWS_ASSERT(m_allocator);
51 return static_cast<RawPointer>(aws_mem_acquire(m_allocator, n * sizeof(T)));
52 }
53
54#if _LIBCPP_STD_VER > 20
55 std::allocation_result<T *> allocate_at_least(size_type n) { return {allocate(n), n}; }
56#endif
57
59 {
60 AWS_ASSERT(m_allocator);
61 aws_mem_release(m_allocator, p);
62 }
63
65 };
66 } // namespace Crt
67} // namespace Aws
void deallocate(RawPointer p, size_type)
Definition StlAllocator.h:58
RawPointer allocate(size_type n, const void *hint=nullptr)
Definition StlAllocator.h:47
std::size_t size_type
Definition StlAllocator.h:38
Allocator * m_allocator
Definition StlAllocator.h:64
StlAllocator(Allocator *allocator) noexcept
Definition StlAllocator.h:27
StlAllocator() noexcept
Definition StlAllocator.h:25
StlAllocator(const StlAllocator< U > &a) noexcept
Definition StlAllocator.h:31
~StlAllocator()
Definition StlAllocator.h:36
std::allocator< T > Base
Definition StlAllocator.h:23
StlAllocator(const StlAllocator< T > &a) noexcept
Definition StlAllocator.h:29
typename std::allocator_traits< std::allocator< U > >::pointer RawPointer
Definition StlAllocator.h:45
Definition Allocator.h:13
AWS_CRT_CPP_API Allocator * ApiAllocator() noexcept
Definition Allocator.cpp:24
aws_allocator Allocator
Definition Allocator.h:14
Definition Allocator.h:11
Definition StlAllocator.h:41
StlAllocator< U > other
Definition StlAllocator.h:42