#include <config.h>
#include <sampler/SliceFactory.h>
#include <sampler/RealSliceSampler.h>
#include <sampler/DiscreteSliceSampler.h>

#include <stdexcept>

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");
    }
}


syntax highlighted by Code2HTML, v. 0.9.1