DUNE PDELab (2.7)

mallocallocator.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3#ifndef DUNE_MALLOC_ALLOCATOR_HH
4#define DUNE_MALLOC_ALLOCATOR_HH
5
6#include <exception>
7#include <cstdlib>
8#include <new>
9#include <utility>
10#include <dune/common/unused.hh>
11
16namespace Dune
17{
22 template <class T>
24 public:
25 typedef std::size_t size_type;
26 typedef std::ptrdiff_t difference_type;
27 typedef T* pointer;
28 typedef const T* const_pointer;
29 typedef T& reference;
30 typedef const T& const_reference;
31 typedef T value_type;
32 template <class U> struct rebind {
33 typedef MallocAllocator<U> other;
34 };
35
37 MallocAllocator() noexcept {}
39 template <class U>
42 ~MallocAllocator() noexcept {}
43
44 pointer address(reference x) const
45 {
46 return &x;
47 }
48 const_pointer address(const_reference x) const
49 {
50 return &x;
51 }
52
54 pointer allocate(size_type n,
55 const void* hint = 0)
56 {
58 if (n > this->max_size())
59 throw std::bad_alloc();
60
61 pointer ret = static_cast<pointer>(std::malloc(n * sizeof(T)));
62 if (!ret)
63 throw std::bad_alloc();
64 return ret;
65 }
66
68 void deallocate(pointer p, size_type n)
69 {
71 std::free(p);
72 }
73
75 size_type max_size() const noexcept
76 {
77 return size_type(-1) / sizeof(T);
78 }
79
81 void construct(pointer p, const T& val)
82 {
83 ::new((void*)p)T(val);
84 }
85
87 template<typename ... Args>
88 void construct(pointer p, Args&&... args)
89 {
90 ::new((void *)p)T(std::forward<Args>(args) ...);
91 }
92
94 void destroy(pointer p)
95 {
96 p->~T();
97 }
98 };
99
101 template<class T>
102 constexpr bool
104 {
105 return true;
106 }
107
109 template<class T>
110 constexpr bool
112 {
113 return false;
114 }
115}
116
117#endif // DUNE_MALLOC_ALLOCATOR_HH
Allocators implementation which simply calls malloc/free.
Definition: mallocallocator.hh:23
~MallocAllocator() noexcept
cleanup this allocator
Definition: mallocallocator.hh:42
void construct(pointer p, const T &val)
copy-construct an object of type T (i.e. make a placement new on p)
Definition: mallocallocator.hh:81
MallocAllocator() noexcept
create a new MallocAllocator
Definition: mallocallocator.hh:37
MallocAllocator(const MallocAllocator< U > &) noexcept
copy construct from an other MallocAllocator, possibly for a different result type
Definition: mallocallocator.hh:40
void deallocate(pointer p, size_type n)
deallocate n objects of type T at address p
Definition: mallocallocator.hh:68
void destroy(pointer p)
destroy an object of type T (i.e. call the destructor)
Definition: mallocallocator.hh:94
pointer allocate(size_type n, const void *hint=0)
allocate n objects of type T
Definition: mallocallocator.hh:54
void construct(pointer p, Args &&... args)
construct an object of type T from variadic parameters
Definition: mallocallocator.hh:88
size_type max_size() const noexcept
max size for allocate
Definition: mallocallocator.hh:75
#define DUNE_UNUSED_PARAMETER(parm)
A macro to mark intentionally unused function parameters with.
Definition: unused.hh:25
EnableIfInterOperable< T1, T2, bool >::type operator==(const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
Checks for equality.
Definition: iteratorfacades.hh:235
EnableIfInterOperable< T1, T2, bool >::type operator!=(const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
Checks for inequality.
Definition: iteratorfacades.hh:257
Dune namespace.
Definition: alignedallocator.hh:14
Definition of the DUNE_UNUSED macro for the case that config.h is not available.
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Jun 17, 22:33, 2024)