Ejemplo n.º 1
0
 //NHibernate specific in case of double-side reference
 public virtual void AddPlace(Place place)
 {
     _places.Push(place);
     place.Location = this;
 }
Ejemplo n.º 2
0
        // 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;
        }
Ejemplo n.º 3
0
 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();
 }
Ejemplo n.º 4
0
        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();
            }
        }