// NAnt - A .NET build tool
// Copyright (C) 2002-2003 Scott Hernandez
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program 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. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// Ian MacLean (imaclean@gmail.com)
using System;
using System.Collections;
namespace NAnt.Core {
[Serializable()]
public sealed class FrameworkInfoDictionary : IDictionary, ICollection, IEnumerable, ICloneable {
#region Private Instance Fields
private Hashtable _innerHash;
#endregion Private Instance Fields
#region Public Instance Constructors
///
/// Initializes a new instance of the class.
///
public FrameworkInfoDictionary() {
_innerHash = new Hashtable();
}
public FrameworkInfoDictionary(FrameworkInfoDictionary original) {
_innerHash = new Hashtable(original.InnerHash);
}
public FrameworkInfoDictionary(IDictionary dictionary) {
_innerHash = new Hashtable (dictionary);
}
///
/// Initializes a new instance of the class
/// with the specified capacity.
///
public FrameworkInfoDictionary(int capacity) {
_innerHash = new Hashtable(capacity);
}
public FrameworkInfoDictionary(IDictionary dictionary, float loadFactor) {
_innerHash = new Hashtable(dictionary, loadFactor);
}
public FrameworkInfoDictionary(IHashCodeProvider codeProvider, IComparer comparer) {
_innerHash = new Hashtable(codeProvider, comparer);
}
public FrameworkInfoDictionary(int capacity, int loadFactor) {
_innerHash = new Hashtable(capacity, loadFactor);
}
public FrameworkInfoDictionary(IDictionary dictionary, IHashCodeProvider codeProvider, IComparer comparer) {
_innerHash = new Hashtable (dictionary, codeProvider, comparer);
}
public FrameworkInfoDictionary(int capacity, IHashCodeProvider codeProvider, IComparer comparer) {
_innerHash = new Hashtable (capacity, codeProvider, comparer);
}
public FrameworkInfoDictionary(IDictionary dictionary, float loadFactor, IHashCodeProvider codeProvider, IComparer comparer) {
_innerHash = new Hashtable (dictionary, loadFactor, codeProvider, comparer);
}
public FrameworkInfoDictionary(int capacity, float loadFactor, IHashCodeProvider codeProvider, IComparer comparer) {
_innerHash = new Hashtable (capacity, loadFactor, codeProvider, comparer);
}
#endregion Public Instance Constructors
#region Internal Instance Properties
internal Hashtable InnerHash {
get { return _innerHash; }
set { _innerHash = value ; }
}
#endregion Internal Instance Properties
#region Implementation of IDictionary
public FrameworkInfoDictionaryEnumerator GetEnumerator() {
return new FrameworkInfoDictionaryEnumerator(this);
}
IDictionaryEnumerator IDictionary.GetEnumerator() {
return new FrameworkInfoDictionaryEnumerator(this);
}
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
public void Remove(string key) {
_innerHash.Remove(key);
}
void IDictionary.Remove(object key) {
Remove((string) key);
}
public bool Contains(string key) {
return _innerHash.Contains(key);
}
bool IDictionary.Contains(object key) {
return Contains((string)key);
}
public void Clear() {
_innerHash.Clear();
}
public void Add(string key, FrameworkInfo value) {
_innerHash.Add (key, value);
}
void IDictionary.Add(object key, object value) {
Add((string) key, (FrameworkInfo) value);
}
public bool IsReadOnly {
get { return _innerHash.IsReadOnly; }
}
public FrameworkInfo this[string key] {
get { return (FrameworkInfo) _innerHash[key]; }
set { _innerHash[key] = value; }
}
object IDictionary.this[object key] {
get { return this[(string) key]; }
set { this[(string) key] = (FrameworkInfo) value; }
}
public ICollection Values {
get { return _innerHash.Values; }
}
public ICollection Keys {
get { return _innerHash.Keys; }
}
public bool IsFixedSize {
get { return _innerHash.IsFixedSize; }
}
#endregion Implementation of IDictionary
#region Implementation of ICollection
void ICollection.CopyTo(Array array, int index) {
_innerHash.CopyTo(array, index);
}
public bool IsSynchronized {
get { return _innerHash.IsSynchronized; }
}
public int Count {
get { return _innerHash.Count; }
}
public object SyncRoot {
get { return _innerHash.SyncRoot; }
}
public void CopyTo(FrameworkInfo[] array, int index) {
_innerHash.CopyTo(array, index);
}
#endregion Implementation of ICollection
#region Implementation of ICloneable
public FrameworkInfoDictionary Clone() {
FrameworkInfoDictionary clone = new FrameworkInfoDictionary();
clone.InnerHash = (Hashtable) _innerHash.Clone();
return clone;
}
object ICloneable.Clone() {
return Clone();
}
#endregion Implementation of ICloneable
#region HashTable Methods
public bool ContainsKey (string key) {
return _innerHash.ContainsKey(key);
}
public bool ContainsValue(FrameworkInfo value) {
return _innerHash.ContainsValue(value);
}
public static FrameworkInfoDictionary Synchronized(FrameworkInfoDictionary nonSync) {
FrameworkInfoDictionary sync = new FrameworkInfoDictionary();
sync.InnerHash = Hashtable.Synchronized(nonSync.InnerHash);
return sync;
}
#endregion HashTable Methods
}
public class FrameworkInfoDictionaryEnumerator : IDictionaryEnumerator {
#region Private Instance Fields
private IDictionaryEnumerator _innerEnumerator;
#endregion Private Instance Fields
#region Internal Instance Constructors
internal FrameworkInfoDictionaryEnumerator(FrameworkInfoDictionary enumerable) {
_innerEnumerator = enumerable.InnerHash.GetEnumerator();
}
#endregion Internal Instance Constructors
#region Implementation of IDictionaryEnumerator
public string Key {
get { return (string) _innerEnumerator.Key; }
}
object IDictionaryEnumerator.Key {
get { return Key; }
}
public FrameworkInfo Value {
get { return (FrameworkInfo) _innerEnumerator.Value; }
}
object IDictionaryEnumerator.Value {
get { return Value; }
}
public DictionaryEntry Entry {
get { return _innerEnumerator.Entry; }
}
#endregion Implementation of IDictionaryEnumerator
#region Implementation of IEnumerator
public void Reset() {
_innerEnumerator.Reset();
}
public bool MoveNext() {
return _innerEnumerator.MoveNext();
}
object IEnumerator.Current {
get { return _innerEnumerator.Current; }
}
public FrameworkInfo Current {
get { return (FrameworkInfo)((DictionaryEntry)_innerEnumerator.Current).Value; }
}
#endregion Implementation of IEnumerator
}
}