// // Mono.Data.ProviderCollection // // Authors: // Brian Ritchie (brianlritchie@hotmail.com) // // // Copyright (C) Brian Ritchie, 2002 // // // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // namespace Mono.Data { using System; using System.Collections; using System.Collections.Specialized; /// /// /// A collection that stores objects. /// /// /// [Serializable ()] public class ProviderCollection : DictionaryBase { /// /// /// Initializes a new instance of . /// /// public ProviderCollection () { } /// /// /// Initializes a new instance of based on another . /// /// /// /// A from which the contents are copied /// public ProviderCollection (ProviderCollection value) { if (value == null) throw new System.ArgumentNullException ("value"); this.AddRange (value); } /// /// /// Initializes a new instance of containing any array of objects. /// /// /// /// A array of objects with which to intialize the collection /// public ProviderCollection (Provider[] value) { if (value == null) throw new System.ArgumentNullException ("value"); this.AddRange (value); } /// /// Represents the entry at the specified index of the . /// /// The zero-based index of the entry to locate in the collection. /// /// The entry at the specified index of the collection. /// /// is outside the valid range of indexes for the collection. public Provider this [string Name] { get { return ((Provider)(Dictionary [Name])); } set { Dictionary [Name] = value; } } public Provider FindByCommandType(Type CommandType) { if (CommandType == null) throw new System.ArgumentNullException ("CommandType"); foreach (Provider p in this) { if (p.CommandType == CommandType) return p; } throw new IndexOutOfRangeException (); } public Provider FindByDataAdapterType(Type DataAdapterType) { if (DataAdapterType == null) throw new System.ArgumentNullException ("DataAdapterType"); foreach (Provider p in this) { if (p.DataAdapterType == DataAdapterType) return p; } throw new IndexOutOfRangeException (); } public Provider FindByConnectionType(Type ConnectionType) { if (ConnectionType == null) throw new System.ArgumentNullException("ConnectionType"); foreach (Provider p in this) { if (p.ConnectionType == ConnectionType) return p; } throw new IndexOutOfRangeException (); } /// /// Adds a with the specified value to the /// . /// /// The to add. /// /// The index at which the new element was inserted. /// /// public void Add(Provider value) { if (value == null) throw new System.ArgumentNullException ("value"); Dictionary.Add (value.Name, value); } /// /// Copies the elements of an array to the end of the . /// /// /// An array of type containing the objects to add to the collection. /// /// /// None. /// /// public void AddRange (Provider[] value) { if (value == null) throw new System.ArgumentNullException ("value"); for (int i = 0; i < value.Length; i++) this.Add (value [i]); } /// /// /// Adds the contents of another to the end of the collection. /// /// /// /// A containing the objects to add to the collection. /// /// /// None. /// /// public void AddRange(ProviderCollection value) { if (value == null) throw new System.ArgumentNullException ("value"); foreach (Provider p in value) this.Add (p); } /// /// Gets a value indicating whether the /// contains the specified . /// /// The to locate. /// /// if the is contained in the collection; /// otherwise, . /// /// public bool Contains (Provider value) { if (value == null) throw new System.ArgumentNullException("value"); return Dictionary.Contains (value); } /// /// Copies the values to a one-dimensional instance at the /// specified index. /// /// The one-dimensional that is the destination of the values copied from . /// The index in where copying begins. /// /// None. /// /// is multidimensional. -or- The number of elements in the is greater than the available space between and the end of . /// is . /// is less than 's lowbound. /// public void CopyTo(Provider[] array, int index) { if (array == null) throw new System.ArgumentNullException ("array"); Dictionary.CopyTo(array, index); } /// /// Returns an enumerator that can iterate through /// the . /// /// None. /// public new ProviderEnumerator GetEnumerator () { return new ProviderEnumerator (this); } /// /// Removes a specific from the /// . /// /// The to remove from the . /// None. /// is not found in the Collection. public void Remove(Provider value) { if (value == null) throw new System.ArgumentNullException ("value"); Dictionary.Remove(value); } public class ProviderEnumerator : object, IEnumerator { private IEnumerator baseEnumerator; private IEnumerable temp; public ProviderEnumerator(ProviderCollection mappings) { if (mappings == null) throw new System.ArgumentNullException ("mappings"); this.temp = ((IEnumerable)(mappings)); this.baseEnumerator = temp.GetEnumerator(); } public Provider Current { get { return ((Provider) ((DictionaryEntry) (baseEnumerator.Current)).Value); } } object IEnumerator.Current { get { return baseEnumerator.Current; } } public bool MoveNext() { return baseEnumerator.MoveNext(); } bool IEnumerator.MoveNext() { return baseEnumerator.MoveNext(); } public void Reset() { baseEnumerator.Reset(); } void IEnumerator.Reset() { baseEnumerator.Reset(); } } } }