//
// System.CodeDom CodeNamespaceImportCollection Class implementation
//
// Author:
// Miguel de Icaza (miguel@ximian.com)
// Daniel Stodden (stodden@in.tum.de)
//
// (C) 2001 Ximian, Inc.
// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
//
// 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.
//
using System.Runtime.InteropServices;
using System.Collections;
namespace System.CodeDom{
/*
* Should probably be derived from CollectionBase like any
* other System.CodeDom.*Collection. MS docs say it currently
* is not, for whichever reason.
*/
[Serializable]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
[ComVisible(true)]
public class CodeNamespaceImportCollection
: IList, ICollection, IEnumerable
{
private Hashtable keys;
private ArrayList data;
//
// Constructors
//
public CodeNamespaceImportCollection ()
{
data = new ArrayList ();
keys = new Hashtable (CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);
}
//
// Properties
//
int ICollection.Count {
get {
return data.Count;
}
}
public int Count {
get {
return data.Count;
}
}
public CodeNamespaceImport this [int index] {
get {
return (CodeNamespaceImport)data[index];
}
set {
CodeNamespaceImport oldImport = (CodeNamespaceImport) data [index];
CodeNamespaceImport newImport = (CodeNamespaceImport) value;
keys.Remove (oldImport.Namespace);
data[index] = value;
keys [newImport.Namespace] = newImport;
}
}
//
// Methods
//
public void Add (CodeNamespaceImport value)
{
if (value == null) {
throw new NullReferenceException ();
}
if (!keys.ContainsKey (value.Namespace)) {
keys [value.Namespace] = value;
data.Add (value);
}
}
public void AddRange (CodeNamespaceImport [] value)
{
if (value == null) {
throw new ArgumentNullException ("value");
}
foreach (CodeNamespaceImport elem in value) {
Add (elem);
}
}
void IList.Clear ()
{
Clear ();
}
public void Clear ()
{
data.Clear ();
keys.Clear ();
}
// IList implementation
bool IList.IsFixedSize {
get {
return false;
}
}
bool IList.IsReadOnly {
get {
return false;
}
}
object IList.this[int index] {
get {
return data[index];
}
set {
this [index] = (CodeNamespaceImport) value;
}
}
int IList.Add( object value )
{
Add ((CodeNamespaceImport) value);
return data.Count - 1;
}
bool IList.Contains( object value )
{
return data.Contains( value );
}
int IList.IndexOf( object value )
{
return data.IndexOf( value );
}
void IList.Insert( int index, object value )
{
data.Insert( index, value );
CodeNamespaceImport import = (CodeNamespaceImport) value;
keys [import.Namespace] = import;
}
void IList.Remove( object value )
{
string ns = ((CodeNamespaceImport)value).Namespace;
data.Remove( value );
foreach (CodeNamespaceImport import in data) {
if (import.Namespace == ns) {
keys [ns] = import;
return;
}
}
keys.Remove (ns);
}
void IList.RemoveAt( int index )
{
string ns = this [index].Namespace;
data.RemoveAt( index );
foreach (CodeNamespaceImport import in data) {
if (import.Namespace == ns) {
keys [ns] = import;
return;
}
}
keys.Remove (ns);
}
// ICollection implementation
object ICollection.SyncRoot {
get {
return null;
}
}
bool ICollection.IsSynchronized {
get {
return data.IsSynchronized;
}
}
void ICollection.CopyTo( Array array, int index )
{
data.CopyTo( array, index );
}
// IEnumerable implementation
IEnumerator IEnumerable.GetEnumerator ()
{
return data.GetEnumerator();
}
// IEnumerable implementation
public IEnumerator GetEnumerator ()
{
return data.GetEnumerator();
}
}
}
|