#include <algorithm>
#include <sstream>
#include "Var.h"
using namespace std;
unordered_map<VarId, VarInfo> Var::varsInfo_;
Var::Var (const Var* v)
{
varId_ = v->varId();
range_ = v->range();
evidence_ = v->getEvidence();
index_ = std::numeric_limits<unsigned>::max();
}
Var::Var (VarId varId, unsigned range, int evidence)
assert (range != 0);
assert (evidence < (int) range);
varId_ = varId;
range_ = range;
evidence_ = evidence;
bool
Var::isValidState (int stateIndex)
return stateIndex >= 0 && stateIndex < (int) range_;
Var::isValidState (const string& stateName)
States states = Var::getVarInfo (varId_).states;
return Util::contains (states, stateName);
void
Var::setEvidence (int ev)
assert (ev < (int) range_);
evidence_ = ev;
Var::setEvidence (const string& ev)
for (unsigned i = 0; i < states.size(); i++) {
if (states[i] == ev) {
evidence_ = i;
return;
assert (false);
string
Var::label (void) const
if (Var::varsHaveInfo()) {
return Var::getVarInfo (varId_).label;
stringstream ss;
ss << "x" << varId_;
return ss.str();
States
Var::states (void) const
return Var::getVarInfo (varId_).states;
States states;
for (unsigned i = 0; i < range_; i++) {
ss << i ;
states.push_back (ss.str());
return states;