Base class for all allocators used by SecBlock.
More...
#include <secblock.h>
|
pointer | address (reference r) const |
|
const_pointer | address (const_reference r) const |
|
void | construct (pointer p, const T &val) |
|
void | destroy (pointer p) |
|
CRYPTOPP_CONSTEXPR size_type | max_size () const |
| Returns the maximum number of elements the allocator can provide.
|
|
|
static const size_type | ELEMS_MAX = SIZE_MAX/sizeof(T) |
| Returns the maximum number of elements the allocator can provide.
|
|
|
static void | CheckSize (size_t size) |
| Verifies the allocator can satisfy a request based on size.
|
|
template<class T>
class AllocatorBase< T >
Base class for all allocators used by SecBlock.
- Template Parameters
-
Definition at line 29 of file secblock.h.
◆ const_pointer
◆ const_reference
◆ difference_type
◆ pointer
◆ reference
◆ size_type
◆ value_type
◆ address() [1/2]
template<class T >
const_pointer AllocatorBase< T >::address |
( |
const_reference |
r | ) |
const |
|
inline |
◆ address() [2/2]
◆ CheckSize()
Verifies the allocator can satisfy a request based on size.
- Parameters
-
size | the size of the allocation, in elements |
- Exceptions
-
CheckSize verifies the number of elements requested is valid.
If size is greater than max_size(), then InvalidArgument is thrown. The library throws InvalidArgument if the size is too large to satisfy.
Internally, preprocessor macros are used rather than std::numeric_limits because the latter is not a constexpr. Some compilers, like Clang, do not optimize it well under all circumstances. Compilers like GCC, ICC and MSVC appear to optimize it well in either form.
The sizeof(T) != 1
in the condition attempts to help the compiler optimize the check for byte types. Coverity findings for CONSTANT_EXPRESSION_RESULT were generated without it. For byte types, size never exceeded ELEMS_MAX but the code was not removed.
- Note
- size is the count of elements, and not the number of bytes
Definition at line 119 of file secblock.h.
◆ construct()
◆ destroy()
◆ max_size()
template<class T >
CRYPTOPP_CONSTEXPR size_type AllocatorBase< T >::max_size |
( |
| ) |
const |
|
inline |
Returns the maximum number of elements the allocator can provide.
- Returns
- the maximum number of elements the allocator can provide
Internally, preprocessor macros are used rather than std::numeric_limits because the latter is not a constexpr. Some compilers, like Clang, do not optimize it well under all circumstances. Compilers like GCC, ICC and MSVC appear to optimize it well in either form.
Definition at line 73 of file secblock.h.
◆ ELEMS_MAX
template<class T >
const size_type AllocatorBase< T >::ELEMS_MAX = SIZE_MAX/sizeof(T) |
|
static |
Returns the maximum number of elements the allocator can provide.
ELEMS_MAX
is the maximum number of elements the Allocator
can provide. The value of ELEMS_MAX
is SIZE_MAX/sizeof(T)
. std::numeric_limits
was avoided due to lack of constexpr
-ness in C++03 and below.
- Note
- In C++03 and below
ELEMS_MAX
is a static data member of type size_type
. In C++11 and above ELEMS_MAX
is an enum
inheriting from size_type
. In both cases ELEMS_MAX
can be used before objects are fully constructed, and it does not suffer the limitations of class methods like max_size
.
- See also
- Issue 346/CVE-2016-9939
- Since
- Crypto++ 6.0
Definition at line 64 of file secblock.h.
The documentation for this class was generated from the following file:
- G:/work/subversion/scol-technologies/trunk/scol/plugins/security/cryptopp/secblock.h