8#ifndef INCLUDED_BSLS_ALIGNMENTUTIL
9#define INCLUDED_BSLS_ALIGNMENTUTIL
208#include <bsls_alignmentfromtype.h>
219#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
220#include <type_traits>
242 typedef void (*FuncPtr)();
257 long long d_longLong;
261 FuncPtr d_funcPointer;
264#if ! (defined(BSLS_PLATFORM_CPU_POWERPC) && defined(BSLS_PLATFORM_OS_LINUX))
265 long double d_longDouble;
267#if defined(BSLS_PLATFORM_CPU_X86) \
268 && (defined(BSLS_PLATFORM_CMP_GNU) || defined(BSLS_PLATFORM_CMP_CLANG)) \
269 && !defined(BSLS_PLATFORM_OS_SOLARIS)
270 AlignmentImp8ByteAlignedType
276#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
277#if BSLS_COMPILERFEATURES_CPLUSPLUS > 202002L
278# if defined(BSLS_PLATFORM_HAS_PRAGMA_GCC_DIAGNOSTIC)
279# pragma GCC diagnostic push
280# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
284 template <std::
size_t t_SIZE, std::
size_t t_ALIGNMENT>
285 static std::integral_constant<std::size_t, t_ALIGNMENT>
286 alignmentOfAlignedStorage(std::aligned_storage<t_SIZE, t_ALIGNMENT>);
287#if BSLS_COMPILERFEATURES_CPLUSPLUS > 202002L
288# if defined(BSLS_PLATFORM_HAS_PRAGMA_GCC_DIAGNOSTIC)
289# pragma GCC diagnostic pop
360 static bool isAligned(
const void *address, std::size_t alignment);
378#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
383 template <std::
size_t t_SIZE>
384 static constexpr std::size_t defaultAlignmentOfAlignedStorage();
452 alignment &= -alignment;
481 return static_cast<int>(
482 (alignment -
reinterpret_cast<std::size_t
>(address))
489 return 0 == (
reinterpret_cast<std::size_t
>(address) & 0x1);
495 return 0 == (
reinterpret_cast<std::size_t
>(address) & 0x3);
501 return 0 == (
reinterpret_cast<std::size_t
>(address) & 0x7);
507 return (0 == alignment ||
508 0 == (
reinterpret_cast<std::size_t
>(address) & (alignment - 1)));
515 std::size_t ptrBits =
reinterpret_cast<std::size_t
>(address);
518 return ptrBits & -ptrBits;
531#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
532template <std::
size_t t_SIZE>
533constexpr std::size_t AlignmentUtil::defaultAlignmentOfAlignedStorage()
535#if BSLS_COMPILERFEATURES_CPLUSPLUS > 202002L
536# if defined(BSLS_PLATFORM_HAS_PRAGMA_GCC_DIAGNOSTIC)
537# pragma GCC diagnostic push
538# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
541 return decltype(alignmentOfAlignedStorage(
542 std::aligned_storage<t_SIZE>()))::value;
543#if BSLS_COMPILERFEATURES_CPLUSPLUS > 202002L
544# if defined(BSLS_PLATFORM_HAS_PRAGMA_GCC_DIAGNOSTIC)
545# pragma GCC diagnostic pop
552#ifndef BDE_OPENSOURCE_PUBLICATION
bsls::AlignmentUtil bsls_AlignmentUtil
This alias is defined for backward compatibility.
Definition bsls_alignmentutil.h:558
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlt_iso8601util.h:707
Definition bsls_alignmentfromtype.h:378
AlignmentImpPriorityToType< PRIORITY >::Type Type
Definition bsls_alignmenttotype.h:396
Definition bsls_alignmentutil.h:236
static bool is2ByteAligned(const void *address)
Definition bsls_alignmentutil.h:487
static bool isAligned(const void *address, std::size_t alignment)
Definition bsls_alignmentutil.h:505
static bool is4ByteAligned(const void *address)
Definition bsls_alignmentutil.h:493
friend union MaxAlignedUnion
Definition bsls_alignmentutil.h:245
static std::size_t roundUpToMaximalAlignment(std::size_t size)
Definition bsls_alignmentutil.h:522
AlignmentToType< BSLS_MAX_ALIGNMENT >::Type MaxAlignedType
Definition bsls_alignmentutil.h:307
static int calculateAlignmentOffset(const void *address, int alignment)
Definition bsls_alignmentutil.h:462
static std::size_t pointerAlignment(const void *address)
Definition bsls_alignmentutil.h:512
@ BSLS_MAX_ALIGNMENT
Definition bsls_alignmentutil.h:300
static bool is8ByteAligned(const void *address)
Definition bsls_alignmentutil.h:499
static int calculateAlignmentFromSize(std::size_t size)
Definition bsls_alignmentutil.h:398