//****************************************************************************************************** // ChannelDefinitionCollectionBase.cs - Gbtc // // Copyright © 2012, Grid Protection Alliance. All Rights Reserved. // // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See // the NOTICE file distributed with this work for additional information regarding copyright ownership. // The GPA licenses this file to you under the MIT License (MIT), the "License"; you may // not use this file except in compliance with the License. You may obtain a copy of the License at: // // http://www.opensource.org/licenses/MIT // // Unless agreed to in writing, the subject software distributed under the License is distributed on an // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the // License for the specific language governing permissions and limitations. // // Code Modification History: // ---------------------------------------------------------------------------------------------------- // 3/7/2005 - J. Ritchie Carroll // Generated original version of source code. // 09/15/2009 - Stephen C. Wills // Added new header and license agreement. // 10/5/2012 - Gavin E. Holden // Added new header and license agreement. // 12/17/2012 - Starlynn Danyelle Gilliam // Modified Header. // //****************************************************************************************************** using System; using System.Runtime.Serialization; namespace GSF.PhasorProtocols { /// /// Represents a protocol independent collection of objects. /// /// Specific type that the contains. [Serializable] public abstract class ChannelDefinitionCollectionBase : ChannelCollectionBase where T : IChannelDefinition { #region [ Constructors ] /// /// Creates a new using specified . /// /// Last valid index for the collection (i.e., maximum count - 1). /// Flag that indicates if collections elements have a fixed size. /// /// is used instead of maximum count so that maximum type values may /// be specified as needed. For example, if the protocol specifies a collection with a signed 16-bit /// maximum length you can specify (i.e., 32,767) as the last valid index /// for the collection since total number of items supported would be 32,768. /// protected ChannelDefinitionCollectionBase(int lastValidIndex, bool fixedElementSize = true) : base(lastValidIndex, fixedElementSize) { } /// /// Creates a new from serialization parameters. /// /// The with populated with data. /// The source for this deserialization. protected ChannelDefinitionCollectionBase(SerializationInfo info, StreamingContext context) : base(info, context) { } #endregion #region [ Methods ] /// /// Inserts an element into the at the specified index. /// /// The zero-based index at which item should be inserted. /// The object to insert. protected override void InsertItem(int index, T item) { // We make sure IChannelDefinition items added to their parent collection know what their index is item.Index = index; base.InsertItem(index, item); } /// /// Replaces the element at the specified index. /// /// The zero-based index of the element to replace. /// The new value for the element at the specified index. The value can be null for reference types. protected override void SetItem(int index, T item) { // We make sure new IChannelDefinition item knows what its index is item.Index = index; base.SetItem(index, item); } /// /// Removes the element at the specified index of the . /// /// The zero-based index of the element to remove. protected override void RemoveItem(int index) { base.RemoveItem(index); // Removing an item from the collection would reorder items in the collection from the // specified index forward. Given how the phasor protocols are being used, removing // an item would be very rare as most collection counts are known in advance... for (int i = index; i < Count; i++) this[i].Index = i; } #endregion } }