226 lines
4.8 KiB
C#
226 lines
4.8 KiB
C#
|
//
|
||
|
// 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();
|
||
|
}
|
||
|
}
|
||
|
}
|