move boost::index_sequence stuff to utilities file
parent
bb33be58b3
commit
82e0d20519
|
@ -27,3 +27,41 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// boost::index_sequence was introduced in 1.66, so we'll manually define an
|
||||||
|
// implementation if user has 1.65. boost::index_sequence is used to get array
|
||||||
|
// indices that align with a parameter pack.
|
||||||
|
#if BOOST_VERSION >= 106600
|
||||||
|
#include <boost/mp11/integer_sequence.hpp>
|
||||||
|
#else
|
||||||
|
namespace boost {
|
||||||
|
namespace mp11 {
|
||||||
|
// Adapted from https://stackoverflow.com/a/32223343/9151520
|
||||||
|
template <size_t... Ints>
|
||||||
|
struct index_sequence {
|
||||||
|
using type = index_sequence;
|
||||||
|
using value_type = size_t;
|
||||||
|
static constexpr std::size_t size() noexcept { return sizeof...(Ints); }
|
||||||
|
};
|
||||||
|
namespace detail {
|
||||||
|
template <class Sequence1, class Sequence2>
|
||||||
|
struct _merge_and_renumber;
|
||||||
|
|
||||||
|
template <size_t... I1, size_t... I2>
|
||||||
|
struct _merge_and_renumber<index_sequence<I1...>, index_sequence<I2...> >
|
||||||
|
: index_sequence<I1..., (sizeof...(I1) + I2)...> {};
|
||||||
|
} // namespace detail
|
||||||
|
template <size_t N>
|
||||||
|
struct make_index_sequence
|
||||||
|
: detail::_merge_and_renumber<
|
||||||
|
typename make_index_sequence<N / 2>::type,
|
||||||
|
typename make_index_sequence<N - N / 2>::type> {};
|
||||||
|
template <>
|
||||||
|
struct make_index_sequence<0> : index_sequence<> {};
|
||||||
|
template <>
|
||||||
|
struct make_index_sequence<1> : index_sequence<0> {};
|
||||||
|
template <class... T>
|
||||||
|
using index_sequence_for = make_index_sequence<sizeof...(T)>;
|
||||||
|
} // namespace mp11
|
||||||
|
} // namespace boost
|
||||||
|
#endif
|
||||||
|
|
|
@ -25,48 +25,11 @@
|
||||||
#include <gtsam/linear/JacobianFactor.h>
|
#include <gtsam/linear/JacobianFactor.h>
|
||||||
#include <gtsam/inference/Factor.h>
|
#include <gtsam/inference/Factor.h>
|
||||||
#include <gtsam/base/OptionalJacobian.h>
|
#include <gtsam/base/OptionalJacobian.h>
|
||||||
|
#include <gtsam/base/utilities.h> // boost::index_sequence
|
||||||
|
|
||||||
#include <boost/serialization/base_object.hpp>
|
#include <boost/serialization/base_object.hpp>
|
||||||
#include <boost/assign/list_of.hpp>
|
#include <boost/assign/list_of.hpp>
|
||||||
|
|
||||||
// boost::index_sequence was introduced in 1.66, so we'll manually define an
|
|
||||||
// implementation if user has 1.65. boost::index_sequence is used to get array
|
|
||||||
// indices that align with a parameter pack.
|
|
||||||
#if BOOST_VERSION >= 106600
|
|
||||||
#include <boost/mp11/integer_sequence.hpp>
|
|
||||||
#else
|
|
||||||
namespace boost {
|
|
||||||
namespace mp11 {
|
|
||||||
// Adapted from https://stackoverflow.com/a/32223343/9151520
|
|
||||||
template <size_t... Ints>
|
|
||||||
struct index_sequence {
|
|
||||||
using type = index_sequence;
|
|
||||||
using value_type = size_t;
|
|
||||||
static constexpr std::size_t size() noexcept { return sizeof...(Ints); }
|
|
||||||
};
|
|
||||||
namespace detail {
|
|
||||||
template <class Sequence1, class Sequence2>
|
|
||||||
struct _merge_and_renumber;
|
|
||||||
|
|
||||||
template <size_t... I1, size_t... I2>
|
|
||||||
struct _merge_and_renumber<index_sequence<I1...>, index_sequence<I2...> >
|
|
||||||
: index_sequence<I1..., (sizeof...(I1) + I2)...> {};
|
|
||||||
} // namespace detail
|
|
||||||
template <size_t N>
|
|
||||||
struct make_index_sequence
|
|
||||||
: detail::_merge_and_renumber<
|
|
||||||
typename make_index_sequence<N / 2>::type,
|
|
||||||
typename make_index_sequence<N - N / 2>::type> {};
|
|
||||||
template <>
|
|
||||||
struct make_index_sequence<0> : index_sequence<> {};
|
|
||||||
template <>
|
|
||||||
struct make_index_sequence<1> : index_sequence<0> {};
|
|
||||||
template <class... T>
|
|
||||||
using index_sequence_for = make_index_sequence<sizeof...(T)>;
|
|
||||||
} // namespace mp11
|
|
||||||
} // namespace boost
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace gtsam {
|
namespace gtsam {
|
||||||
|
|
||||||
using boost::assign::cref_list_of;
|
using boost::assign::cref_list_of;
|
||||||
|
|
Loading…
Reference in New Issue