//
// Mono.Data.ProviderCollection
//
// Authors:
// Brian Ritchie (brianlritchie@hotmail.com)
//
//
// Copyright (C) Brian Ritchie, 2002
//
//
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)
{
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)
{
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)
{
foreach (Provider p in this)
{
if (p.CommandType==CommandType)
return p;
}
throw new IndexOutOfRangeException();
}
public Provider FindByDataAdapterType(Type DataAdapterType)
{
foreach (Provider p in this)
{
if (p.DataAdapterType==DataAdapterType)
return p;
}
throw new IndexOutOfRangeException();
}
public Provider FindByConnectionType(Type 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)
{
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)
{
for (int i = 0; (i < value.Length); i = (i + 1))
{
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)
{
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)
{
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)
{
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)
{
Dictionary.Remove(value);
}
public class ProviderEnumerator : object, IEnumerator
{
private IEnumerator baseEnumerator;
private IEnumerable temp;
public ProviderEnumerator(ProviderCollection 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();
}
}
}
}