/** * @file SymbolicConditional.h * @brief Symbolic Conditional node for use in Bayes nets * @author Frank Dellaert */ // \callgraph #pragma once #include #include #include #include // TODO: make cpp file #include "Testable.h" namespace gtsam { /** * Conditional node for use in a Bayes net */ class SymbolicConditional: Testable { private: std::list parents_; public: /** convenience typename for a shared pointer to this class */ typedef boost::shared_ptr shared_ptr; /** * No parents */ SymbolicConditional() { } /** * Single parent */ SymbolicConditional(const std::string& parent) { parents_.push_back(parent); } /** * Two parents */ SymbolicConditional(const std::string& parent1, const std::string& parent2) { parents_.push_back(parent1); parents_.push_back(parent2); } /** * A list */ SymbolicConditional(const std::list& parents):parents_(parents) { } /** print */ void print(const std::string& s = "SymbolicConditional") const { std::cout << s; BOOST_FOREACH(std::string parent, parents_) std::cout << " " << parent; std::cout << std::endl; } /** check equality */ bool equals(const SymbolicConditional& other, double tol = 1e-9) const { return parents_ == other.parents_; } /** return any parent */ std::list parents() const { return parents_;} }; } /// namespace gtsam