diff --git a/gtsam/hybrid/HybridFactor.cpp b/gtsam/hybrid/HybridFactor.cpp index 89b1943cd..5582166a3 100644 --- a/gtsam/hybrid/HybridFactor.cpp +++ b/gtsam/hybrid/HybridFactor.cpp @@ -54,20 +54,28 @@ HybridFactor::HybridFactor(const KeyVector &keys) category_(HybridCategory::Continuous), continuousKeys_(keys) {} +/* ************************************************************************ */ +HybridCategory GetCategory(const KeyVector &continuousKeys, + const DiscreteKeys &discreteKeys) { + if ((continuousKeys.size() == 0) && (discreteKeys.size() != 0)) { + return HybridCategory::Discrete; + } else if ((continuousKeys.size() != 0) && (discreteKeys.size() == 0)) { + return HybridCategory::Continuous; + } else if ((continuousKeys.size() != 0) && (discreteKeys.size() != 0)) { + return HybridCategory::Hybrid; + } else { + // Case where we have no keys. Should never happen. + return HybridCategory::None; + } +} + /* ************************************************************************ */ HybridFactor::HybridFactor(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys) : Base(CollectKeys(continuousKeys, discreteKeys)), + category_(GetCategory(continuousKeys, discreteKeys)), discreteKeys_(discreteKeys), - continuousKeys_(continuousKeys) { - if ((continuousKeys.size() == 0) && (discreteKeys.size() != 0)) { - category_ = HybridCategory::Discrete; - } else if ((continuousKeys.size() != 0) && (discreteKeys.size() == 0)) { - category_ = HybridCategory::Continuous; - } else { - category_ = HybridCategory::Hybrid; - } -} + continuousKeys_(continuousKeys) {} /* ************************************************************************ */ HybridFactor::HybridFactor(const DiscreteKeys &discreteKeys) @@ -98,6 +106,9 @@ void HybridFactor::print(const std::string &s, case HybridCategory::Hybrid: std::cout << "Hybrid "; break; + case HybridCategory::None: + std::cout << "None "; + break; } std::cout << "["; diff --git a/gtsam/hybrid/HybridFactor.h b/gtsam/hybrid/HybridFactor.h index 2cc7453f4..d0b9bbabe 100644 --- a/gtsam/hybrid/HybridFactor.h +++ b/gtsam/hybrid/HybridFactor.h @@ -42,7 +42,7 @@ DiscreteKeys CollectDiscreteKeys(const DiscreteKeys &key1, const DiscreteKeys &key2); /// Enum to help with categorizing hybrid factors. -enum class HybridCategory { Discrete, Continuous, Hybrid }; +enum class HybridCategory { None, Discrete, Continuous, Hybrid }; /** * Base class for *truly* hybrid probabilistic factors @@ -57,7 +57,7 @@ enum class HybridCategory { Discrete, Continuous, Hybrid }; class GTSAM_EXPORT HybridFactor : public Factor { private: /// Record what category of HybridFactor this is. - HybridCategory category_; + HybridCategory category_ = HybridCategory::None; protected: // Set of DiscreteKeys for this factor.