Program Listing for File MemoryAlignmentHelper.h#

Return to documentation for file (MemoryAlignmentHelper.h)

#pragma once

#include <cstdint>
#include <cassert>

class MemoryAlignmentHelper
{
public:
    static inline size_t AlignSize(size_t i_size, size_t i_align = sDefaultAlignment) {
        return (i_size + i_align - 1) & ~(i_align - 1);
    }

    static inline size_t AlignPadding(size_t i_size, size_t i_align = sDefaultAlignment) {
        return AlignSize(i_size, i_align) - i_size;
    }

    static inline bool IsPowerOfTwo(size_t i_align)
    {
        return (i_align & (i_align - 1)) == 0;
    }

    static inline uintptr_t AlignDown(uintptr_t i_value, size_t i_align = sDefaultAlignment)
    {
        assert(i_align);
        assert(IsPowerOfTwo(i_align));
        return i_value & ~(i_align - 1);
    }

    static inline uintptr_t AlignUp(uintptr_t i_value, size_t i_align = sDefaultAlignment)
    {
        assert(i_align);
        assert(IsPowerOfTwo(i_align));
        return (i_value + (i_align - 1)) & ~(i_align - 1);
    }

    static const size_t sDefaultAlignment = sizeof(size_t);
};