using System; namespace Moserware.Skills.FactorGraphs { public class Variable { private readonly string _Name; private readonly TValue _Prior; public Variable(string name, TValue prior) { _Name = "Variable[" + name + "]"; _Prior = prior; ResetToPrior(); } public virtual TValue Value { get; set; } public void ResetToPrior() { Value = _Prior; } public override string ToString() { return _Name; } } public class DefaultVariable : Variable { public DefaultVariable() : base("Default", default(TValue)) { } public override TValue Value { get { return default(TValue); } set { throw new NotSupportedException(); } } } public class KeyedVariable : Variable { public KeyedVariable(TKey key, string name, VariableFactory parentFactory, int parentIndex, TValue prior) : base(name, prior) { Key = key; } public TKey Key { get; private set; } } }