/// <summary>
        /// merged boundaries of another object into this object
        /// </summary>
        /// <param name="b">another physical boundary object of the same type as this</param>
        public virtual void Add(FiniteDateTimeBoundaries b)
        {
            if (GetType() == b.GetType())
            {
                BoundariesChangedData data = 0;
                if (b._numberOfItems > 0)
                {
                    _numberOfItems += b._numberOfItems;

                    data |= BoundariesChangedData.NumberOfItemsChanged;
                    if (b._minValue < _minValue)
                    {
                        _minValue = b._minValue; data |= BoundariesChangedData.LowerBoundChanged;
                    }
                    if (b._maxValue > _maxValue)
                    {
                        _maxValue = b._maxValue; data |= BoundariesChangedData.UpperBoundChanged;
                    }
                }

                if (!IsSuspended && 0 != data) // performance tweak, see overrides OnSuspended and OnResume for details (if suspended, we have saved the state of the instance for comparison when we resume).
                {
                    EhSelfChanged(new BoundariesChangedEventArgs(data));
                }
            }
            else
            {
                throw new ArgumentException("Argument has not the same type as this, argument type: " + b.GetType().ToString() + ", this type: " + GetType().ToString());
            }
        }
        /// <summary>
        /// merged boundaries of another object into this object
        /// </summary>
        /// <param name="b">another physical boundary object of the same type as this</param>
        public virtual void Add(FiniteDateTimeBoundaries b)
        {
            if (this.GetType() == b.GetType())
            {
                if (b._numberOfItems > 0)
                {
                    bool bLower = false, bUpper = false;
                    _numberOfItems += b._numberOfItems;
                    if (b._minValue < _minValue)
                    {
                        _minValue = b._minValue;
                        bLower    = true;
                    }
                    if (b._maxValue > _maxValue)
                    {
                        _maxValue = b._maxValue;
                        bUpper    = true;
                    }

                    if (EventsEnabled)
                    {
                        OnNumberOfItemsChanged(); // fire item number event
                        if (bLower || bUpper)
                        {
                            OnBoundaryChanged(bLower, bUpper);
                        }
                    }
                }
            }
            else
            {
                throw new ArgumentException("Argument has not the same type as this, argument type: " + b.GetType().ToString() + ", this type: " + this.GetType().ToString());
            }
        }
            public void Serialize(object obj, Altaxo.Serialization.Xml.IXmlSerializationInfo info)
            {
                FiniteDateTimeBoundaries s = (FiniteDateTimeBoundaries)obj;

                info.AddValue("NumberOfItems", s._numberOfItems);
                info.AddValue("MinValue", s._minValue);
                info.AddValue("MaxValue", s._maxValue);
            }
            public object Deserialize(object o, Altaxo.Serialization.Xml.IXmlDeserializationInfo info, object parent)
            {
                FiniteDateTimeBoundaries s = null != o ? (FiniteDateTimeBoundaries)o : new FiniteDateTimeBoundaries();

                s._numberOfItems = info.GetInt32("NumberOfItems");
                s._minValue      = info.GetDateTime("MinValue");
                s._maxValue      = info.GetDateTime("MaxValue");

                return(s);
            }
 public FiniteDateTimeBoundaries(FiniteDateTimeBoundaries x)
     : base(x)
 {
     _minValue = x._minValue;
     _maxValue = x._maxValue;
 }
		/// <summary>
		/// merged boundaries of another object into this object
		/// </summary>
		/// <param name="b">another physical boundary object of the same type as this</param>
		public virtual void Add(FiniteDateTimeBoundaries b)
		{
			if (this.GetType() == b.GetType())
			{
				BoundariesChangedData data = 0;
				if (b._numberOfItems > 0)
				{
					_numberOfItems += b._numberOfItems;

					data |= BoundariesChangedData.NumberOfItemsChanged;
					if (b._minValue < _minValue) { _minValue = b._minValue; data |= BoundariesChangedData.LowerBoundChanged; }
					if (b._maxValue > _maxValue) { _maxValue = b._maxValue; data |= BoundariesChangedData.UpperBoundChanged; }
				}

				if (!IsSuspended && 0 != data) // performance tweak, see overrides OnSuspended and OnResume for details (if suspended, we have saved the state of the instance for comparison when we resume).
				{
					EhSelfChanged(new BoundariesChangedEventArgs(data));
				}
			}
			else
			{
				throw new ArgumentException("Argument has not the same type as this, argument type: " + b.GetType().ToString() + ", this type: " + this.GetType().ToString());
			}
		}
		public FiniteDateTimeBoundaries(FiniteDateTimeBoundaries x)
			: base(x)
		{
			_minValue = x._minValue;
			_maxValue = x._maxValue;
		}
    /// <summary>
    /// merged boundaries of another object into this object
    /// </summary>
    /// <param name="b">another physical boundary object of the same type as this</param>
    public virtual void Add(FiniteDateTimeBoundaries b)
    {
      if(this.GetType()==b.GetType())
      {
        if(b._numberOfItems>0)
        {
          bool bLower=false,bUpper=false;
          _numberOfItems += b._numberOfItems;
          if(b._minValue < _minValue) 
          {
            _minValue = b._minValue;
            bLower=true;
          }
          if(b._maxValue > _maxValue)
          {
            _maxValue = b._maxValue;
            bUpper=true;
          }
          
          if(EventsEnabled)
          {
            OnNumberOfItemsChanged(); // fire item number event
            if(bLower||bUpper)
              OnBoundaryChanged(bLower,bUpper);
          }

        }
      }
      else
      {
        throw new ArgumentException("Argument has not the same type as this, argument type: " + b.GetType().ToString() + ", this type: " +this.GetType().ToString());
      }
    }