diff --git a/include/utils/Flattenable.h b/include/utils/Flattenable.h index 882a8b2499a1c9e29228003ecf34760984867218..70204c417fc6e84cbb6f3a878b8503504c06d554 100644 --- a/include/utils/Flattenable.h +++ b/include/utils/Flattenable.h @@ -19,6 +19,7 @@ #include +#include #include #include #include @@ -44,7 +45,12 @@ public: template static size_t align(void*& buffer) { - return align( const_cast(buffer) ); + static_assert(!(N & (N - 1)), "Can only align to a power of 2."); + void* b = buffer; + buffer = reinterpret_cast((uintptr_t(buffer) + (N-1)) & ~(N-1)); + size_t delta = size_t(uintptr_t(buffer) - uintptr_t(b)); + memset(b, 0, delta); + return delta; } static void advance(void*& buffer, size_t& size, size_t offset) {