diff --git a/gtsam_unstable/linear/bayesTreeOperations.cpp b/gtsam_unstable/linear/bayesTreeOperations.cpp index 99daa1bb4..c2e84dec3 100644 --- a/gtsam_unstable/linear/bayesTreeOperations.cpp +++ b/gtsam_unstable/linear/bayesTreeOperations.cpp @@ -127,26 +127,6 @@ findPathCliques(const GaussianBayesTree::sharedClique& initial) { return result; } -/* ************************************************************************* */ -GaussianFactorGraph liquefy(const GaussianBayesTree::sharedClique& root, bool splitConditionals) { - GaussianFactorGraph result; - if (root && root->conditional()) { - GaussianConditional::shared_ptr conditional = root->conditional(); - if (!splitConditionals) - result.push_back(conditional->toFactor()); - else - result.push_back(splitFactor(conditional->toFactor())); - } - BOOST_FOREACH(const GaussianBayesTree::sharedClique& child, root->children()) - result.push_back(liquefy(child, splitConditionals)); - return result; -} - -/* ************************************************************************* */ -GaussianFactorGraph liquefy(const GaussianBayesTree& bayesTree, bool splitConditionals) { - return liquefy(bayesTree.root(), splitConditionals); -} - /* ************************************************************************* */ } // \namespace gtsam diff --git a/gtsam_unstable/linear/bayesTreeOperations.h b/gtsam_unstable/linear/bayesTreeOperations.h index 471b38376..453678611 100644 --- a/gtsam_unstable/linear/bayesTreeOperations.h +++ b/gtsam_unstable/linear/bayesTreeOperations.h @@ -67,13 +67,33 @@ GTSAM_UNSTABLE_EXPORT std::deque findPathCliques(const GaussianBayesTree::sharedClique& initial); /** - * Liquefies a GaussianBayesTree into a GaussianFactorGraph recursively, given either a - * root clique or a full bayes tree. + * Liquefies a BayesTree into a GaussianFactorGraph recursively, given a + * root clique * * @param splitConditionals flag enables spliting multi-frontal conditionals into separate factors */ -GTSAM_UNSTABLE_EXPORT GaussianFactorGraph liquefy(const GaussianBayesTree::sharedClique& root, bool splitConditionals = false); -GTSAM_UNSTABLE_EXPORT GaussianFactorGraph liquefy(const GaussianBayesTree& bayesTree, bool splitConditionals = false); +template +GaussianFactorGraph liquefy(const typename BAYESTREE::sharedClique& root, bool splitConditionals = false) { + GaussianFactorGraph result; + if (root && root->conditional()) { + GaussianConditional::shared_ptr conditional = root->conditional(); + if (!splitConditionals) + result.push_back(conditional->toFactor()); + else + result.push_back(splitFactor(conditional->toFactor())); + } + BOOST_FOREACH(const typename BAYESTREE::sharedClique& child, root->children()) + result.push_back(liquefy(child, splitConditionals)); + return result; +} + +/** + * Liquefies a BayesTree into a GaussianFactorGraph recursively, from a full bayes tree. + */ +template +GaussianFactorGraph liquefy(const BAYESTREE& bayesTree, bool splitConditionals = false) { + return liquefy(bayesTree.root(), splitConditionals); +} } // \namespace gtsam