#include #include #include #include #include using std::logic_error; bool SliceFactory::canSample(StochasticNode * snode, Graph const &graph) const { return RealSliceSampler::canSample(snode, graph) || DiscreteSliceSampler::canSample(snode, graph); } Sampler *SliceFactory::makeGibbsSampler(StochasticNode *snode, Graph const &graph) const { if (RealSliceSampler::canSample(snode, graph)) { return new RealSliceSampler(snode, graph); } else if (DiscreteSliceSampler::canSample(snode, graph)) { return new DiscreteSliceSampler(snode, graph); } else { throw logic_error("Unable to construct slice sampler"); } }