Skip to content
Snippets Groups Projects
align.hh 623 B
Newer Older
  • Learn to ignore specific revisions
  • #ifndef ALIGN_HH_
    #define ALIGN_HH_
    
    #include "types.hh"
    
    template <typename T>
    T align_down(T n, T alignment)
    {
        return n & ~(alignment - 1);
    }
    
    template <typename T>
    T align_up(T n, T alignment)
    {
        return align_down(n + alignment - 1, alignment);
    }
    
    template <class T>
    T* align_down(T* ptr, size_t alignment)
    {
        auto n = reinterpret_cast<uintptr_t>(ptr);
        n = align_down(n, alignment);
        return reinterpret_cast<T*>(n);
    }
    
    template <class T>
    T* align_up(T* ptr, size_t alignment)
    {
        auto n = reinterpret_cast<uintptr_t>(ptr);
        n = align_up(n, alignment);
        return reinterpret_cast<T*>(n);
    }
    
    #endif