diff --git a/gtsam/base/LieVector.h b/gtsam/base/LieVector.h index a8bfe3007..8286c95a6 100644 --- a/gtsam/base/LieVector.h +++ b/gtsam/base/LieVector.h @@ -128,6 +128,19 @@ private: ar & boost::serialization::make_nvp("Vector", boost::serialization::base_object(*this)); } - }; + +// Define GTSAM traits +namespace traits { + +template<> +struct is_manifold : public std::true_type { +}; + +template<> +struct dimension : public Dynamic { +}; + +} + } // \namespace gtsam diff --git a/gtsam/geometry/Cal3Unified.h b/gtsam/geometry/Cal3Unified.h index eacbf7053..ad8e7b904 100644 --- a/gtsam/geometry/Cal3Unified.h +++ b/gtsam/geometry/Cal3Unified.h @@ -126,10 +126,6 @@ public: private: - /// @} - /// @name Advanced Interface - /// @{ - /** Serialization function */ friend class boost::serialization::access; template @@ -140,9 +136,25 @@ private: ar & BOOST_SERIALIZATION_NVP(xi_); } - /// @} +}; +// Define GTSAM traits +namespace traits { + +template<> +struct is_manifold : public std::true_type { +}; + +template<> +struct dimension : public std::integral_constant { +}; + +template<> +struct zero { + static Cal3Unified value() { return Cal3Unified();} }; } +} + diff --git a/gtsam/geometry/EssentialMatrix.h b/gtsam/geometry/EssentialMatrix.h index 32b966261..a973f9cec 100644 --- a/gtsam/geometry/EssentialMatrix.h +++ b/gtsam/geometry/EssentialMatrix.h @@ -196,5 +196,23 @@ private: }; +// Define GTSAM traits +namespace traits { + +template<> +struct is_manifold : public std::true_type { +}; + +template<> +struct dimension : public std::integral_constant { +}; + +template<> +struct zero { + static EssentialMatrix value() { return EssentialMatrix();} +}; + +} + } // gtsam diff --git a/gtsam/geometry/Rot2.h b/gtsam/geometry/Rot2.h index d121beb12..4142d4473 100644 --- a/gtsam/geometry/Rot2.h +++ b/gtsam/geometry/Rot2.h @@ -230,10 +230,6 @@ namespace gtsam { /** return 2*2 transpose (inverse) rotation matrix */ Matrix transpose() const; - /// @} - /// @name Advanced Interface - /// @{ - private: /** Serialization function */ friend class boost::serialization::access; @@ -245,8 +241,22 @@ namespace gtsam { ar & BOOST_SERIALIZATION_NVP(s_); } - /// @} - }; + // Define GTSAM traits + namespace traits { + + template<> + struct is_group : public std::true_type { + }; + + template<> + struct is_manifold : public std::true_type { + }; + + template<> + struct dimension : public std::integral_constant { + }; + + } } // gtsam diff --git a/gtsam/geometry/StereoCamera.h b/gtsam/geometry/StereoCamera.h index 70917b2c4..82914f6ab 100644 --- a/gtsam/geometry/StereoCamera.h +++ b/gtsam/geometry/StereoCamera.h @@ -155,4 +155,22 @@ private: }; +// Define GTSAM traits +namespace traits { + +template<> +struct is_manifold : public std::true_type { +}; + +template<> +struct dimension : public std::integral_constant { +}; + +template<> +struct zero { + static StereoCamera value() { return StereoCamera();} +}; + +} + } diff --git a/gtsam/geometry/StereoPoint2.h b/gtsam/geometry/StereoPoint2.h index 8ce2e49bf..000f7d16f 100644 --- a/gtsam/geometry/StereoPoint2.h +++ b/gtsam/geometry/StereoPoint2.h @@ -173,4 +173,20 @@ namespace gtsam { }; + // Define GTSAM traits + namespace traits { + + template<> + struct is_group : public std::true_type { + }; + + template<> + struct is_manifold : public std::true_type { + }; + + template<> + struct dimension : public std::integral_constant { + }; + + } } diff --git a/gtsam/geometry/Unit3.h b/gtsam/geometry/Unit3.h index 8d2c024c0..bb2ee318a 100644 --- a/gtsam/geometry/Unit3.h +++ b/gtsam/geometry/Unit3.h @@ -156,5 +156,25 @@ private: }; +// Define GTSAM traits +namespace traits { + +template<> +struct is_manifold : public std::true_type { +}; + +template<> +struct dimension : public std::integral_constant { +}; + +template<> +struct zero { + static Unit3 value() { + return Unit3(); + } +}; + +} + } // namespace gtsam diff --git a/gtsam/navigation/ImuBias.h b/gtsam/navigation/ImuBias.h index 32911e589..8301a0a6b 100644 --- a/gtsam/navigation/ImuBias.h +++ b/gtsam/navigation/ImuBias.h @@ -218,6 +218,23 @@ namespace imuBias { } // namespace ImuBias +// Define GTSAM traits +namespace traits { + +template<> +struct is_group : public std::true_type { +}; + +template<> +struct is_manifold : public std::true_type { +}; + +template<> +struct dimension : public std::integral_constant { +}; + +} + } // namespace gtsam diff --git a/gtsam_unstable/dynamics/PoseRTV.h b/gtsam_unstable/dynamics/PoseRTV.h index 51e09ca5f..80729e8a2 100644 --- a/gtsam_unstable/dynamics/PoseRTV.h +++ b/gtsam_unstable/dynamics/PoseRTV.h @@ -183,4 +183,23 @@ private: } }; +// Define GTSAM traits +namespace traits { + +template<> +struct is_manifold : public std::true_type { +}; + +template<> +struct dimension : public std::integral_constant { +}; + +template<> +struct zero { + static PoseRTV value() { + return PoseRTV(); + } +}; + +} } // \namespace gtsam