public void SetValue(Transaction transaction, object value)
{
if (this.transaction != null && this.transaction != transaction)
throw new InvalidOperationException("Another transaction modified this value");
foreach (long time in this.committedValues.Keys)
if (time > transaction.Start)
throw new InvalidOperationException("Another transaction modified this value");
if (this.transaction == null)
transaction.RegisterValue(this);
this.transaction = transaction;
this.value = value;
}