⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 collections.cs

📁 C#编写的c#编译器
💻 CS
📖 第 1 页 / 共 5 页
字号:
			public override int Capacity
			{
				get
				{
					int result = 0;
					rwLock.AcquireReaderLock(timeout);

					try
					{
						result = collection.Capacity;
					}
					finally
					{
						rwLock.ReleaseReaderLock();
					}

					return result;
				}
				
				set
				{
					rwLock.AcquireWriterLock(timeout);

					try
					{
						collection.Capacity = value;
					}
					finally
					{
						rwLock.ReleaseWriterLock();
					}
				}
			}

			public override int AddRange(ImportCollection x)
			{
				int result = 0;
				rwLock.AcquireWriterLock(timeout);

				try
				{
					result = collection.AddRange(x);
				}
				finally
				{
					rwLock.ReleaseWriterLock();
				}

				return result;
			}

			public override int AddRange(Import[] x)
			{
				int result = 0;
				rwLock.AcquireWriterLock(timeout);

				try
				{
					result = collection.AddRange(x);
				}
				finally
				{
					rwLock.ReleaseWriterLock();
				}

				return result;
			}
			#endregion
		}
		#endregion

		#region Nested Read Only Wrapper class
		private class ReadOnlyImportCollection : ImportCollection
		{
			#region Implementation (data)
			private ImportCollection m_collection;
			#endregion

			#region Construction
			internal ReadOnlyImportCollection(ImportCollection list) : base(Tag.Default)
			{
				m_collection = list;
			}
			#endregion
			
			#region Type-safe ICollection
			public override void CopyTo(Import[] array)
			{
				m_collection.CopyTo(array);
			}

			public override void CopyTo(Import[] array, int start)
			{
				m_collection.CopyTo(array,start);
			}
			public override int Count
			{
				get { return m_collection.Count; }
			}

			public override bool IsSynchronized
			{
				get { return m_collection.IsSynchronized; }
			}

			public override object SyncRoot
			{
				get { return this.m_collection.SyncRoot; }
			}
			#endregion
			
			#region Type-safe IList
			public override Import this[int i]
			{
				get { return m_collection[i]; }
				set { throw new NotSupportedException("This is a Read Only Collection and can not be modified"); }
			}

			public override int Add(Import x)
			{
				throw new NotSupportedException("This is a Read Only Collection and can not be modified");
			}
			
			public override void Clear()
			{
				throw new NotSupportedException("This is a Read Only Collection and can not be modified");
			}

			public override bool Contains(Import x)
			{
				return m_collection.Contains(x);
			}

			public override int IndexOf(Import x)
			{
				return m_collection.IndexOf(x);
			}

			public override void Insert(int pos, Import x)
			{
				throw new NotSupportedException("This is a Read Only Collection and can not be modified");
			}

			public override void Remove(Import x)
			{           
				throw new NotSupportedException("This is a Read Only Collection and can not be modified");
			}

			public override void RemoveAt(int pos)
			{
				throw new NotSupportedException("This is a Read Only Collection and can not be modified");
			}
			
			public override bool IsFixedSize
			{
				get {return true;}
			}

			public override bool IsReadOnly
			{
				get {return true;}
			}
			#endregion

			#region Type-safe IEnumerable
			public override IImportCollectionEnumerator GetEnumerator()
			{
				return m_collection.GetEnumerator();
			}
			#endregion

			#region Public Helpers
			// (just to mimic some nice features of ArrayList)
			public override int Capacity
			{
				get { return m_collection.Capacity; }
				
				set { throw new NotSupportedException("This is a Read Only Collection and can not be modified"); }
			}

			public override int AddRange(ImportCollection x)
			{
				throw new NotSupportedException("This is a Read Only Collection and can not be modified");
			}

			public override int AddRange(Import[] x)
			{
				throw new NotSupportedException("This is a Read Only Collection and can not be modified");
			}
			#endregion
		}
		#endregion

		#region Text
		public override string Text
		{
			get
			{
				return "Imports";
			}
		}
		#endregion

	}
	#endregion
	#region NamespaceDeclCollection  
	/// <summary>
	///		A strongly-typed collection of <see cref="NamespaceDecl"/> objects.
	/// </summary>
	[Serializable]
	public class NamespaceDeclCollection : CSharpGraph, ICollection, IList, IEnumerable, ICloneable
	{
		public override GraphTypes GraphType{get{return GraphTypes.NamespaceDeclCollection;}}
		#region Interfaces
		/// <summary>
		///		Supports type-safe iteration over a <see cref="NamespaceDeclCollection"/>.
		/// </summary>
		public interface INamespaceDeclCollectionEnumerator
		{
			/// <summary>
			///		Gets the current element in the collection.
			/// </summary>
			NamespaceDecl Current {get;}

			/// <summary>
			///		Advances the enumerator to the next element in the collection.
			/// </summary>
			/// <exception cref="InvalidOperationException">
			///		The collection was modified after the enumerator was created.
			/// </exception>
			/// <returns>
			///		<c>true</c> if the enumerator was successfully advanced to the next element; 
			///		<c>false</c> if the enumerator has passed the end of the collection.
			/// </returns>
			bool MoveNext();

			/// <summary>
			///		Sets the enumerator to its initial position, before the first element in the collection.
			/// </summary>
			void Reset();
		}
		#endregion

		private const int DEFAULT_CAPACITY = 16;

		#region Implementation (data)
		private NamespaceDecl[] m_array;
		private int m_count = 0;
		[NonSerialized]
		private int m_version = 0;
		#endregion
	
		#region Static Wrappers
		/// <summary>
		///		Creates a synchronized (thread-safe) wrapper for a 
		///     <c>NamespaceDeclCollection</c> instance.
		/// </summary>
		/// <returns>
		///     An <c>NamespaceDeclCollection</c> wrapper that is synchronized (thread-safe).
		/// </returns>
		public static NamespaceDeclCollection Synchronized(NamespaceDeclCollection list)
		{
			if(list==null)
				throw new ArgumentNullException("list");
			return new SyncNamespaceDeclCollection(list);
		}
		
		/// <summary>
		///		Creates a read-only wrapper for a 
		///     <c>NamespaceDeclCollection</c> instance.
		/// </summary>
		/// <returns>
		///     An <c>NamespaceDeclCollection</c> wrapper that is read-only.
		/// </returns>
		public static NamespaceDeclCollection ReadOnly(NamespaceDeclCollection list)
		{
			if(list==null)
				throw new ArgumentNullException("list");
			return new ReadOnlyNamespaceDeclCollection(list);
		}
		#endregion

		#region Construction
		/// <summary>
		///		Initializes a new instance of the <c>NamespaceDeclCollection</c> class
		///		that is empty and has the default initial capacity.
		/// </summary>
		public NamespaceDeclCollection()
		{
			m_array = new NamespaceDecl[DEFAULT_CAPACITY];
		}
		
		/// <summary>
		///		Initializes a new instance of the <c>NamespaceDeclCollection</c> class
		///		that has the specified initial capacity.
		/// </summary>
		/// <param name="capacity">
		///		The number of elements that the new <c>NamespaceDeclCollection</c> is initially capable of storing.
		///	</param>
		public NamespaceDeclCollection(int capacity)
		{
			m_array = new NamespaceDecl[capacity];
		}

		/// <summary>
		///		Initializes a new instance of the <c>NamespaceDeclCollection</c> class
		///		that contains elements copied from the specified <c>NamespaceDeclCollection</c>.
		/// </summary>
		/// <param name="c">The <c>NamespaceDeclCollection</c> whose elements are copied to the new collection.</param>
		public NamespaceDeclCollection(NamespaceDeclCollection c)
		{
			m_array = new NamespaceDecl[c.Count];
			AddRange(c);
		}

		/// <summary>
		///		Initializes a new instance of the <c>NamespaceDeclCollection</c> class
		///		that contains elements copied from the specified <see cref="NamespaceDecl"/> array.
		/// </summary>
		/// <param name="a">The <see cref="NamespaceDecl"/> array whose elements are copied to the new list.</param>
		public NamespaceDeclCollection(NamespaceDecl[] a)
		{
			m_array = new NamespaceDecl[a.Length];
			AddRange(a);
		}
		
		protected enum Tag 
		{
			Default
		}

		protected NamespaceDeclCollection(Tag t)
		{
			m_array = null;
		}
		#endregion
		
		#region Operations (type-safe ICollection)
		/// <summary>
		///		Gets the number of elements actually contained in the <c>NamespaceDeclCollection</c>.
		/// </summary>
		public virtual int Count
		{
			get { return m_count; }
		}

		/// <summary>
		///		Copies the entire <c>NamespaceDeclCollection</c> to a one-dimensional
		///		<see cref="NamespaceDecl"/> array.
		/// </summary>
		/// <param name="array">The one-dimensional <see cref="NamespaceDecl"/> array to copy to.</param>
		public virtual void CopyTo(NamespaceDecl[] array)
		{
			this.CopyTo(array, 0);
		}

		/// <summary>
		///		Copies the entire <c>NamespaceDeclCollection</c> to a one-dimensional
		///		<see cref="NamespaceDecl"/> array, starting at the specified index of the target array.
		/// </summary>
		/// <param name="array">The one-dimensional <see cref="NamespaceDecl"/> array to copy to.</param>
		/// <param name="start">The zero-based index in <paramref name="array"/> at which copying begins.</param>
		public virtual void CopyTo(NamespaceDecl[] array, int start)
		{
			if (m_count > array.GetUpperBound(0) + 1 - start)
				throw new System.ArgumentException("Destination array was not long enough.");
			
			Array.Copy(m_array, 0, array, start, m_count); 
		}

		/// <summary>
		///		Gets a value indicating whether access to the collection is synchronized (thread-safe).
		/// </summary>
		/// <returns>true if access to the ICollection is synchronized (thread-safe); otherwise, false.</returns>
		public virtual bool IsSynchronized
		{
			get { return m_array.IsSynchronized; }
		}

		/// <summary>
		///		Gets an object that can be used to synchronize access to the collection.
		/// </summary>
		public virtual object SyncRoot
		{
			get { return m_array.SyncRoot; }
		}
		#endregion
		
		#region Operations (type-safe IList)
		/// <summary>
		///		Gets or sets the <see cref="NamespaceDecl"/> at the specified index.
		/// </summary>
		/// <param name="index">The zero-based index of the element to get or set.</param>
		/// <exception cref="ArgumentOutOfRangeException">
		///		<para><paramref name="index"/> is less than zero</para>
		///		<para>-or-</para>
		///		<para><paramref name="index"/> is equal to or greater than <see cref="NamespaceDeclCollection.Count"/>.</para>
		/// </exception>
		public virtual NamespaceDecl this[int index]
		{
			get
			{
				ValidateIndex(index); // throws
				return m_array[index]; 
			}
			set
			{
				ValidateIndex(index); // throws
				++m_version; 
				m_array[index] = value; 
			}
		}

		/// <summary>
		///		Adds a <see cref="NamespaceDecl"/> to the end of the <c>NamespaceDeclCollection</c>.
		/// </summary>
		/// <param name="item">The <see cref="NamespaceDecl"/> to be added to the end of the <c>NamespaceDeclCollection</c>.</param>
		/// <returns>The index at which the value has been added.</returns>
		public virtual int Add(NamespaceDecl item)
		{
			if (m_count == m_array.Length)
				EnsureCapacity(m_count + 1);

			m_array[m_count] = item;
			m_version++;

			return m_count++;
		}
		
		/// <summary>
		///		Removes all elements from the <c>NamespaceDeclCollection</c>.
		/// </summary>
		public virtual void Clear()
		{
			++m_version;
			m_array = new NamespaceDecl[DEFAULT_CAPACITY];
			m_count = 0;
		}
		
		/// <summary>
		///		Creates a shallow copy of the <see cref="NamespaceDeclCollection"/>.
		/// </summary>
		public virtual object Clone()
		{
			NamespaceDeclCollection newColl = new NamespaceDeclCollection(m_count);
			Array.Copy(m_array, 0, newColl.m_array, 0, m_count);
			newColl.m_count = m_count;
			newColl.m_version = m_version;

			return newColl;
		}

		/// <summary>
		///		Determines whether a given <see cref="NamespaceDecl"/> is in the <c>NamespaceDeclCollection</c>.
		/// </summary>
		/// <param name="item">The <see cref="NamespaceDecl"/> to check for.</param>
		/// <returns><c>true</c> if <paramref name="item"/> is found in the <c>NamespaceDeclCollection</c>; otherwise, <c>false</c>.</returns>
		public virtual bool Contains(NamespaceDecl item)
		{
			for (int i=0; i != m_count; ++i)
				if (m_array[i].Equals(item))
					return true;
			return false;
		}

		/// <summary>
		///		Returns the zero-based index of the first occurrence of a <see cref="NamespaceDecl"/>
		///		in the <c>NamespaceDeclCollection</c>.
		/// </summary>
		/// <param name="item">The <see cref="NamespaceDecl"/> to locate in the <c>NamespaceDeclCollection</c>.</param>
		/// <returns>
		///		The zero-based index of the first occurrence of <paramref name="item"/> 
		///		in the entire <c>NamespaceDeclCollection</c>, if found; otherwise, -1.
		///	</returns>
		public virtual int IndexOf(NamespaceDecl item)
		{
			for (int i=0; i != m_count; ++i)
				if (m_array[i].Equals(item))
					return i;
			return -1;
		}

		/// <summary>
		///		Inserts an element into the <c>NamespaceDeclCollection</c> at the specified index.
		/// </summary>
		/// <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param>
		/// <param name="item">The <see cref="NamespaceDecl"/> to insert.</param>
		/// <exception cref="ArgumentOutOfRangeException">
		///		<para><paramref name="index"/> is less than zero</para>
		///		<para>-or-</para>
		///		<para><paramref name="index

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -