#region Copyright (c) 2011-2023 Technosoftware GmbH. All rights reserved //----------------------------------------------------------------------------- // Copyright (c) 2011-2023 Technosoftware GmbH. All rights reserved // Web: https://www.technosoftware.com // // The source code in this file is covered under a dual-license scenario: // - Owner of a purchased license: SCLA 1.0 // - GPL V3: everybody else // // SCLA license terms accompanied with this source code. // See SCLA 1.0: https://technosoftware.com/license/Source_Code_License_Agreement.pdf // // GNU General Public License as published by the Free Software Foundation; // version 3 of the License are accompanied with this source code. // See https://technosoftware.com/license/GPLv3License.txt // // This source code is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. //----------------------------------------------------------------------------- #endregion Copyright (c) 2011-2023 Technosoftware GmbH. All rights reserved #region Using Directives using System; using System.Collections; #endregion namespace Technosoftware.DaAeHdaClient.Da { /// A collection of subscriptions. [Serializable] public class TsCDaSubscriptionCollection : ICollection, ICloneable, IList { /////////////////////////////////////////////////////////////////////// #region Fields private ArrayList _subscriptions = new ArrayList(); #endregion /////////////////////////////////////////////////////////////////////// #region Constructors, Destructor, Initialization /// /// Initializes object with the default values. /// public TsCDaSubscriptionCollection() { } /// /// Initializes object with the specified SubscriptionCollection object. /// public TsCDaSubscriptionCollection(TsCDaSubscriptionCollection subscriptions) { if (subscriptions != null) { foreach (TsCDaSubscription subscription in subscriptions) { Add(subscription); } } } #endregion /////////////////////////////////////////////////////////////////////// #region Properties /// /// Gets the item at the specified index. /// public TsCDaSubscription this[int index] { get => (TsCDaSubscription)_subscriptions[index]; set => _subscriptions[index] = value; } #endregion /////////////////////////////////////////////////////////////////////// #region ICloneable Members /// /// Creates a deep copy of the object. /// public virtual object Clone() { var clone = (TsCDaSubscriptionCollection)MemberwiseClone(); clone._subscriptions = new ArrayList(); foreach (TsCDaSubscription subscription in _subscriptions) { clone._subscriptions.Add(subscription.Clone()); } return clone; } #endregion /////////////////////////////////////////////////////////////////////// #region ICollection Members /// /// Indicates whether access to the ICollection is synchronized (thread-safe). /// public bool IsSynchronized => false; /// /// Gets the number of objects in the collection. /// public int Count => (_subscriptions != null) ? _subscriptions.Count : 0; /// /// Copies the objects to an Array, starting at a the specified index. /// /// The one-dimensional Array that is the destination for the objects. /// The zero-based index in the Array at which copying begins. public void CopyTo(Array array, int index) { if (_subscriptions != null) { _subscriptions.CopyTo(array, index); } } /// /// Copies the objects to an Array, starting at a the specified index. /// /// The one-dimensional Array that is the destination for the objects. /// The zero-based index in the Array at which copying begins. public void CopyTo(TsCDaSubscription[] array, int index) { CopyTo((Array)array, index); } /// /// Indicates whether access to the ICollection is synchronized (thread-safe). /// public object SyncRoot => this; #endregion /////////////////////////////////////////////////////////////////////// #region IEnumerable Members /// /// Returns an enumerator that can iterate through a collection. /// /// An IEnumerator that can be used to iterate through the collection. public IEnumerator GetEnumerator() { return _subscriptions.GetEnumerator(); } #endregion /////////////////////////////////////////////////////////////////////// #region IList Members /// /// Gets a value indicating whether the IList is read-only. /// public bool IsReadOnly => false; /// /// Gets or sets the element at the specified index. /// object IList.this[int index] { get => _subscriptions[index]; set { if (!typeof(TsCDaSubscription).IsInstanceOfType(value)) { throw new ArgumentException("May only add Subscription objects into the collection."); } _subscriptions[index] = value; } } /// /// Removes the IList subscription at the specified index. /// /// The zero-based index of the subscription to remove. public void RemoveAt(int index) { _subscriptions.RemoveAt(index); } /// /// Inserts an subscription to the IList at the specified position. /// /// The zero-based index at which value should be inserted. /// The Object to insert into the IList. public void Insert(int index, object value) { if (!typeof(TsCDaSubscription).IsInstanceOfType(value)) { throw new ArgumentException("May only add Subscription objects into the collection."); } _subscriptions.Insert(index, value); } /// /// Removes the first occurrence of a specific object from the IList. /// /// The Object to remove from the IList. public void Remove(object value) { _subscriptions.Remove(value); } /// /// Determines whether the IList contains a specific value. /// /// The Object to locate in the IList. /// true if the Object is found in the IList; otherwise, false. public bool Contains(object value) { return _subscriptions.Contains(value); } /// /// Removes all subscriptions from the IList. /// public void Clear() { _subscriptions.Clear(); } /// /// Determines the index of a specific subscription in the IList. /// /// The Object to locate in the IList. /// The index of value if found in the list; otherwise, -1. public int IndexOf(object value) { return _subscriptions.IndexOf(value); } /// /// Adds an subscription to the IList. /// /// The Object to add to the IList. /// The position into which the new element was inserted. public int Add(object value) { if (!typeof(TsCDaSubscription).IsInstanceOfType(value)) { throw new ArgumentException("May only add Subscription objects into the collection."); } return _subscriptions.Add(value); } /// /// Indicates whether the IList has a fixed size. /// public bool IsFixedSize => false; /// /// Inserts an subscription to the IList at the specified position. /// /// The zero-based index at which value should be inserted. /// The Object to insert into the IList. public void Insert(int index, TsCDaSubscription value) { Insert(index, (object)value); } /// /// Removes the first occurrence of a specific object from the IList. /// /// The Object to remove from the IList. public void Remove(TsCDaSubscription value) { Remove((object)value); } /// /// Determines whether the IList contains a specific value. /// /// The Object to locate in the IList. /// true if the Object is found in the IList; otherwise, false. public bool Contains(TsCDaSubscription value) { return Contains((object)value); } /// /// Determines the index of a specific subscription in the IList. /// /// The Object to locate in the IList. /// The index of value if found in the list; otherwise, -1. public int IndexOf(TsCDaSubscription value) { return IndexOf((object)value); } /// /// Adds an subscription to the IList. /// /// The Object to add to the IList. /// The position into which the new element was inserted. public int Add(TsCDaSubscription value) { return Add((object)value); } #endregion } }