public void EndSimulation()
        {
            if (_sentReport)
                return;

            PEQAggregateInfoReport report = new PEQAggregateInfoReport(1);
            report._numSearches = _numSearches;

            Notify(report);
            _sentReport = true;
        }
        public IInfoReport Subtract(IInfoReport targetFromThisObject)
        {
            // Probably will be unused for this report type.
            if (targetFromThisObject is PEQAggregateInfoReport)
            {
                int newID;
                double newTimestamp;
                ILocation newLocation;
                bool sameNode = false;

                if (targetFromThisObject.ID == _id)
                {
                    sameNode = true;
                    newID = _id;
                    newLocation = _location;
                }
                else
                {
                    sameNode = false;
                    newID = int.MaxValue;
                    newLocation = null;
                }

                if (targetFromThisObject.Time > _timestamp)
                    newTimestamp = targetFromThisObject.Time;
                else newTimestamp = _timestamp;

                PEQAggregateInfoReport target = (PEQAggregateInfoReport)targetFromThisObject;
                PEQAggregateInfoReport output = new PEQAggregateInfoReport(newTimestamp,
                    _key, _label);
                output._location = newLocation;
                output._numSearches = this._numSearches - target._numSearches;
                return output;
            }
            else return null;
        }
        /*       / \
         *     // | \\
         *    /   |   \
         *        |           */
        public IInfoReport Add(IInfoReport withTarget)
        {
            if (withTarget is PEQAggregateInfoReport)
            {
                int newID;
                double newTimestamp;
                ILocation newLocation;
                bool sameNode;
                if (withTarget.ID == _id)
                {
                    sameNode = true;
                    newID = _id;
                    newLocation = _location;
                }
                else
                {
                    sameNode = false;
                    newID = int.MaxValue;
                    newLocation = null;
                }

                if (withTarget.Time > _timestamp)
                    newTimestamp = withTarget.Time;
                else newTimestamp = _timestamp;

                PEQAggregateInfoReport target = (PEQAggregateInfoReport)withTarget;
                PEQAggregateInfoReport output = new PEQAggregateInfoReport(newTimestamp,
                    _key, _label);
                output._location = newLocation;
                output._numSearches = this._numSearches + target._numSearches;
                return output;
            }
            else return null;
        }