diff --git a/CMakeLists.txt b/CMakeLists.txt index d65f9d58d61537465e07df578644411cc9f12502..ea73ef4086d952dbaf28bc81230432739a50b036 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,6 +74,7 @@ SEARCH_FOR_BOOST() SET(${PROJECT_NAME}_UTILS_HEADERS include/eigenpy/utils/scalar-name.hpp include/eigenpy/utils/is-approx.hpp + include/eigenpy/utils/is-aligned.hpp ) SET(${PROJECT_NAME}_SOLVERS_HEADERS diff --git a/include/eigenpy/eigen-allocator.hpp b/include/eigenpy/eigen-allocator.hpp index d6fdf208b94bcfce888dd7b4bf330468a5028685..b5f92c696c5fa1bd02f349745378b2b5fde422a2 100644 --- a/include/eigenpy/eigen-allocator.hpp +++ b/include/eigenpy/eigen-allocator.hpp @@ -8,8 +8,7 @@ #include "eigenpy/fwd.hpp" #include "eigenpy/map.hpp" #include "eigenpy/scalar-conversion.hpp" - -#include <boost/align/is_aligned.hpp> +#include "eigenpy/utils/is-aligned.hpp" namespace eigenpy { @@ -233,7 +232,7 @@ namespace eigenpy if(Options != Eigen::Unaligned) // we need to check whether the memory is correctly aligned and composed of a continuous segment { void * data_ptr = PyArray_DATA(pyArray); - if(!PyArray_ISONESEGMENT(pyArray) || !boost::alignment::is_aligned(Options,data_ptr)) + if(!PyArray_ISONESEGMENT(pyArray) || !is_aligned(data_ptr,Option)) need_to_allocate |= true; } diff --git a/include/eigenpy/utils/is-aligned.hpp b/include/eigenpy/utils/is-aligned.hpp new file mode 100644 index 0000000000000000000000000000000000000000..e87691158b76f249754f7844826e3914aced7b06 --- /dev/null +++ b/include/eigenpy/utils/is-aligned.hpp @@ -0,0 +1,16 @@ +// +// Copyright (c) 2020 INRIA +// + +#ifndef __eigenpy_utils_is_aligned_hpp__ +#define __eigenpy_utils_is_aligned_hpp__ + +namespace eigenpy +{ + inline bool is_aligned(void * ptr, std::size_t alignment) + { + return (reinterpret_cast<std::size_t>(ptr) & (alignment - 1)) == 0; + } +} + +#endif