|
|
@@ -12,26 +12,14 @@
|
|
|
|
|
|
namespace sophiar {
|
|
|
|
|
|
- template<typename T>
|
|
|
- struct is_eigen_type : std::is_base_of<Eigen::EigenBase<T>, T> {
|
|
|
- };
|
|
|
-
|
|
|
- template<typename T>
|
|
|
- inline constexpr size_t small_obj_align_bytes() {
|
|
|
- if constexpr (is_eigen_type<T>::value) { return EIGEN_MAX_ALIGN_BYTES; }
|
|
|
- return alignof(T);
|
|
|
- }
|
|
|
-
|
|
|
template<typename T>
|
|
|
struct small_obj_wrapper : public small_obj<small_obj_wrapper<T>,
|
|
|
- aligned_allocator<small_obj_align_bytes<T>()>> {
|
|
|
+ aligned_allocator<alignof(T)>> {
|
|
|
|
|
|
using this_type = small_obj_wrapper<T>;
|
|
|
using value_type = T;
|
|
|
|
|
|
- static constexpr auto value_align_bytes = small_obj_align_bytes<T>();
|
|
|
-
|
|
|
- alignas(value_align_bytes) T value;
|
|
|
+ T value;
|
|
|
|
|
|
small_obj_wrapper() = default;
|
|
|
|
|
|
@@ -68,9 +56,6 @@ namespace sophiar {
|
|
|
static constexpr size_t binary_length() {
|
|
|
return sizeof(T);
|
|
|
}
|
|
|
-
|
|
|
- public:
|
|
|
- EIGEN_MAKE_ALIGNED_OPERATOR_NEW
|
|
|
};
|
|
|
|
|
|
template<size_t Length>
|