@@ -50,41 +50,65 @@ DiscreteKeys CollectDiscreteKeys(const DiscreteKeys &key1,
50
50
51
51
/* ************************************************************************ */
52
52
HybridFactor::HybridFactor (const KeyVector &keys)
53
- : Base(keys), isContinuous_(true ), continuousKeys_(keys) {}
53
+ : Base(keys), category_(Category::Continuous), continuousKeys_(keys) {}
54
+
55
+ /* ************************************************************************ */
56
+ HybridFactor::Category GetCategory (const KeyVector &continuousKeys,
57
+ const DiscreteKeys &discreteKeys) {
58
+ if ((continuousKeys.size () == 0 ) && (discreteKeys.size () != 0 )) {
59
+ return HybridFactor::Category::Discrete;
60
+ } else if ((continuousKeys.size () != 0 ) && (discreteKeys.size () == 0 )) {
61
+ return HybridFactor::Category::Continuous;
62
+ } else if ((continuousKeys.size () != 0 ) && (discreteKeys.size () != 0 )) {
63
+ return HybridFactor::Category::Hybrid;
64
+ } else {
65
+ // Case where we have no keys. Should never happen.
66
+ return HybridFactor::Category::None;
67
+ }
68
+ }
54
69
55
70
/* ************************************************************************ */
56
71
HybridFactor::HybridFactor (const KeyVector &continuousKeys,
57
72
const DiscreteKeys &discreteKeys)
58
73
: Base(CollectKeys(continuousKeys, discreteKeys)),
59
- isDiscrete_ ((continuousKeys.size() == 0) && (discreteKeys.size() != 0)),
60
- isContinuous_((continuousKeys.size() != 0) && (discreteKeys.size() == 0)),
61
- isHybrid_((continuousKeys.size() != 0) && (discreteKeys.size() != 0)),
74
+ category_ (GetCategory(continuousKeys, discreteKeys)),
62
75
discreteKeys_(discreteKeys),
63
76
continuousKeys_(continuousKeys) {}
64
77
65
78
/* ************************************************************************ */
66
79
HybridFactor::HybridFactor (const DiscreteKeys &discreteKeys)
67
80
: Base(CollectKeys({}, discreteKeys)),
68
- isDiscrete_( true ),
81
+ category_(Category::Discrete ),
69
82
discreteKeys_(discreteKeys),
70
83
continuousKeys_({}) {}
71
84
72
85
/* ************************************************************************ */
73
86
bool HybridFactor::equals (const HybridFactor &lf, double tol) const {
74
87
const This *e = dynamic_cast <const This *>(&lf);
75
- return e != nullptr && Base::equals (*e, tol) &&
76
- isDiscrete_ == e->isDiscrete_ && isContinuous_ == e->isContinuous_ &&
77
- isHybrid_ == e->isHybrid_ && continuousKeys_ == e->continuousKeys_ &&
88
+ return e != nullptr && Base::equals (*e, tol) && category_ == e->category_ &&
89
+ continuousKeys_ == e->continuousKeys_ &&
78
90
discreteKeys_ == e->discreteKeys_ ;
79
91
}
80
92
81
93
/* ************************************************************************ */
82
94
void HybridFactor::print (const std::string &s,
83
95
const KeyFormatter &formatter) const {
84
96
std::cout << (s.empty () ? " " : s + " \n " );
85
- if (isContinuous_) std::cout << " Continuous " ;
86
- if (isDiscrete_) std::cout << " Discrete " ;
87
- if (isHybrid_) std::cout << " Hybrid " ;
97
+ switch (category_) {
98
+ case Category::Continuous:
99
+ std::cout << " Continuous " ;
100
+ break ;
101
+ case Category::Discrete:
102
+ std::cout << " Discrete " ;
103
+ break ;
104
+ case Category::Hybrid:
105
+ std::cout << " Hybrid " ;
106
+ break ;
107
+ case Category::None:
108
+ std::cout << " None " ;
109
+ break ;
110
+ }
111
+
88
112
std::cout << " [" ;
89
113
for (size_t c = 0 ; c < continuousKeys_.size (); c++) {
90
114
std::cout << formatter (continuousKeys_.at (c));
0 commit comments