Skip to content

Commit 2218f3c

Browse files
committed
aligned_wrapper.hpp
1 parent 2489500 commit 2218f3c

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

cpp-template-utils.pro

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ HEADERS += \
2222
$$files(string/*.hpp, false) \
2323
$$files(tuple/*.hpp, false) \
2424
$$files(utility/*.h*, false) \
25-
hash/mixers.h
25+
hash/mixers.h \
26+
utility/aligned_wrapper.hpp

utility/aligned_wrapper.hpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
#include <type_traits>
3+
4+
template <typename T, size_t Alignment>
5+
struct alignas(Alignment) Aligned {
6+
T value;
7+
8+
Aligned() = default;
9+
10+
template <typename... Args, typename = std::enable_if_t<std::is_constructible_v<T, Args...>>>
11+
explicit Aligned(Args&&... args) : value(std::forward<Args>(args)...) {}
12+
13+
operator T&() noexcept { return value; }
14+
operator const T&() const noexcept { return value; }
15+
};
16+
17+
#ifdef __APPLE__
18+
template <typename T>
19+
using CacheLinePadded = Aligned<T, 128>;
20+
#else
21+
template <typename T>
22+
using CacheLinePadded = Aligned<T, 64>;
23+
#endif

0 commit comments

Comments
 (0)