]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/mem/PoolingAllocator.h
2 + * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
4 + * Squid software is distributed under GPLv2+ license and includes
5 + * contributions from numerous individuals and organizations.
6 + * Please see the COPYING and CONTRIBUTORS files for details.
9 #ifndef SQUID_MEM_POOLINGALLOCATOR_H
10 #define SQUID_MEM_POOLINGALLOCATOR_H
12 #include "mem/forward.h"
14 /// STL Allocator that uses Squid memory pools for memory management
15 template <class Value
>
16 class PoolingAllocator
19 /* STL Allocator API */
20 using value_type
= Value
;
21 PoolingAllocator() noexcept
{}
22 template <class Other
> PoolingAllocator(const PoolingAllocator
<Other
> &) noexcept
{}
23 value_type
*allocate(std::size_t n
) { return static_cast<value_type
*>(memAllocRigid(n
*sizeof(value_type
))); }
24 void deallocate(value_type
*vp
, std::size_t n
) noexcept
{ memFreeRigid(vp
, n
*sizeof(value_type
)); }
26 // The following declarations are only necessary for compilers that do not
27 // fully support C++11 Allocator-related APIs, such as GCC v4.8.
28 // The corresponding std::allocator declarations are deprecated in C++17.
29 // TODO: Remove after dropping support for deficient compilers.
31 using size_type
= size_t;
32 using pointer
= Value
*;
33 using const_pointer
= const Value
*;
34 using reference
= Value
&;
35 using const_reference
= const Value
&;
37 template <class OtherValue
>
39 typedef PoolingAllocator
<OtherValue
> other
;
42 template<class U
, class ... Args
> void construct(U
*p
, Args
&& ... args
) { new((void *)p
) U(std::forward
<Args
>(args
)...); }
43 template<typename OtherValue
> void destroy(OtherValue
*p
) { p
->~OtherValue(); }
46 template <class L
, class R
>
48 operator ==(const PoolingAllocator
<L
>&, const PoolingAllocator
<R
>&) noexcept
53 template <class L
, class R
>
55 operator !=(const PoolingAllocator
<L
> &l
, const PoolingAllocator
<R
> &r
) noexcept
60 #endif /* SQUID_MEM_POOLINGALLOCATOR_H */