//NHibernate specific in case of double-side reference public virtual void AddPlace(Place place) { _places.Push(place); place.Location = this; }
// REMARK side effect: always set current place if return >= 0 public override double TestInput(IList<IMeasure> measures) { Log.Debug("To be tested " + this.Name); if (measures.Count == 0) { return -1D; } _currPlace = null; double min = Double.MaxValue; foreach (var place in _places) { double curr = place.TestInput(measures); if (curr.CompareTo(0D) >= 0 && curr.CompareTo(min) < 0) { min = curr; _currPlace = place; } } if (_currPlace != null) { Log.Debug("Place recognized = " + _currPlace.Id); return min; } // REMARK current place was not set up Log.Debug("No place recognized"); return -1D; }
public override void UpdateStats(IList<IMeasure> measures) { //just to be sure that a current place is set if (_currPlace == null && TestInput(measures) <= 0) { _currPlace = _places.Peek(); } // TODO find a better way than a side effect Debug.Assert(_currPlace != null, "_currPlace != null"); Log.Debug("Place to be updated = " + _currPlace.Id); _currPlace.UpdateStats(measures); UpdateTimeStats(); }
public override void ForceLocation(IList<IMeasure> measures) { // it needs to be called before UpdateStats SetUpCurrentTimeStats(); if (TestInput(measures).CompareTo(0D) >= 0) { // currPlace is setup by side-effect Debug.Assert(_currPlace != null, "_currPlace != null"); UpdateStats(measures); _currPlace.RestartLearning(); } else { AddPlace(_Factory.CreatePlace(measures)); _currPlace = _places.Peek(); // if UpdateStats is not called, time stats need to be updated UpdateTimeStats(); } }