Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / Microsoft / Scripting / Utils / ReadOnlyCollectionBuilder.cs / 1305376 / ReadOnlyCollectionBuilder.cs
/* **************************************************************************** * * Copyright (c) Microsoft Corporation. * * This source code is subject to terms and conditions of the Microsoft Public License. A * copy of the license can be found in the License.html file at the root of this distribution. If * you cannot locate the Microsoft Public License, please send an email to * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound * by the terms of the Microsoft Public License. * * You must not remove this notice, or any other, from this software. * * * ***************************************************************************/ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Dynamic.Utils; using System.Linq.Expressions; #if SILVERLIGHT using System.Core; #endif namespace System.Runtime.CompilerServices { ////// The builder for read only collection. /// ///The type of the collection element. #if !SILVERLIGHT [Serializable] #endif [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")] public sealed class ReadOnlyCollectionBuilder: IList , System.Collections.IList { private const int DefaultCapacity = 4; private T[] _items; private int _size; private int _version; #if !SILVERLIGHT [NonSerialized] #endif private Object _syncRoot; static readonly T[] _emptyArray = new T[0]; /// /// Constructs a ReadOnlyCollectionBuilder. /// public ReadOnlyCollectionBuilder() { _items = _emptyArray; } ////// Constructs a ReadOnlyCollectionBuilder with a given initial capacity. /// The contents are empty but builder will have reserved room for the given /// number of elements before any reallocations are required. /// public ReadOnlyCollectionBuilder(int capacity) { ContractUtils.Requires(capacity >= 0, "capacity"); _items = new T[capacity]; } ////// Constructs a ReadOnlyCollectionBuilder, copying contents of the given collection. /// /// public ReadOnlyCollectionBuilder(IEnumerablecollection) { ContractUtils.Requires(collection != null, "collection"); ICollection c = collection as ICollection ; if (c != null) { int count = c.Count; _items = new T[count]; c.CopyTo(_items, 0); _size = count; } else { _size = 0; _items = new T[DefaultCapacity]; using (IEnumerator en = collection.GetEnumerator()) { while (en.MoveNext()) { Add(en.Current); } } } } /// /// Gets and sets the capacity of this ReadOnlyCollectionBuilder /// public int Capacity { get { return _items.Length; } set { ContractUtils.Requires(value >= _size, "value"); if (value != _items.Length) { if (value > 0) { T[] newItems = new T[value]; if (_size > 0) { Array.Copy(_items, 0, newItems, 0, _size); } _items = newItems; } else { _items = _emptyArray; } } } } ////// Returns number of elements in the ReadOnlyCollectionBuilder. /// public int Count { get { return _size; } } #region IListMembers /// /// Returns the index of the first occurrence of a given value in the builder. /// /// An item to search for. ///The index of the first occurrence of an item. public int IndexOf(T item) { return Array.IndexOf(_items, item, 0, _size); } ////// Inserts an item to the /// The zero-based index at which item should be inserted. /// The object to insert into theat the specified index. /// . public void Insert(int index, T item) { ContractUtils.Requires(index <= _size, "index"); if (_size == _items.Length) { EnsureCapacity(_size + 1); } if (index < _size) { Array.Copy(_items, index, _items, index + 1, _size - index); } _items[index] = item; _size++; _version++; } /// /// Removes the /// The zero-based index of the item to remove. public void RemoveAt(int index) { ContractUtils.Requires(index >= 0 && index < _size, "index"); _size--; if (index < _size) { Array.Copy(_items, index + 1, _items, index, _size - index); } _items[_size] = default(T); _version++; } ///item at the specified index. /// /// Gets or sets the element at the specified index. /// /// The zero-based index of the element to get or set. ///The element at the specified index. public T this[int index] { get { ContractUtils.Requires(index < _size, "index"); return _items[index]; } set { ContractUtils.Requires(index < _size, "index"); _items[index] = value; _version++; } } #endregion #region ICollectionMembers /// /// Adds an item to the /// The object to add to the. /// . public void Add(T item) { if (_size == _items.Length) { EnsureCapacity(_size + 1); } _items[_size++] = item; _version++; } /// /// Removes all items from the public void Clear() { if (_size > 0) { Array.Clear(_items, 0, _size); _size = 0; } _version++; } ///. /// /// Determines whether the /// the object to locate in thecontains a specific value /// . /// true if item is found in the public bool Contains(T item) { if ((Object)item == null) { for (int i = 0; i < _size; i++) { if ((Object)_items[i] == null) { return true; } } return false; } else { EqualityComparer; otherwise, false. c = EqualityComparer .Default; for (int i = 0; i < _size; i++) { if (c.Equals(_items[i], item)) { return true; } } return false; } } /// /// Copies the elements of the /// The one-dimensionalto an , /// starting at particular index. /// that is the destination of the elements copied from . /// The zero-based index in array at which copying begins. public void CopyTo(T[] array, int arrayIndex) { Array.Copy(_items, 0, array, arrayIndex, _size); } bool ICollection .IsReadOnly { get { return false; } } /// /// Removes the first occurrence of a specific object from the /// The object to remove from the. /// . /// true if item was successfully removed from the public bool Remove(T item) { int index = IndexOf(item); if (index >= 0) { RemoveAt(index); return true; } return false; } #endregion #region IEnumerable; /// otherwise, false. This method also returns false if item is not found in the original . /// Members /// /// Returns an enumerator that iterates through the collection. /// ///A public IEnumeratorthat can be used to iterate through the collection. GetEnumerator() { return new Enumerator(this); } #endregion #region IEnumerable Members System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } #endregion #region IList Members bool System.Collections.IList.IsReadOnly { get { return false; } } int System.Collections.IList.Add(object value) { ValidateNullValue(value, "value"); try { Add((T)value); } catch (InvalidCastException) { ThrowInvalidTypeException(value, "value"); } return Count - 1; } bool System.Collections.IList.Contains(object value) { if (IsCompatibleObject(value)) { return Contains((T)value); } else return false; } int System.Collections.IList.IndexOf(object value) { if (IsCompatibleObject(value)) { return IndexOf((T)value); } return -1; } void System.Collections.IList.Insert(int index, object value) { ValidateNullValue(value, "value"); try { Insert(index, (T)value); } catch (InvalidCastException) { ThrowInvalidTypeException(value, "value"); } } bool System.Collections.IList.IsFixedSize { get { return false; } } void System.Collections.IList.Remove(object value) { if (IsCompatibleObject(value)) { Remove((T)value); } } object System.Collections.IList.this[int index] { get { return this[index]; } set { ValidateNullValue(value, "value"); try { this[index] = (T)value; } catch (InvalidCastException) { ThrowInvalidTypeException(value, "value"); } } } #endregion #region ICollection Members void System.Collections.ICollection.CopyTo(Array array, int index) { ContractUtils.RequiresNotNull(array, "array"); ContractUtils.Requires(array.Rank == 1, "array"); Array.Copy(_items, 0, array, index, _size); } bool System.Collections.ICollection.IsSynchronized { get { return false; } } object System.Collections.ICollection.SyncRoot { get { if (_syncRoot == null) { System.Threading.Interlocked.CompareExchange
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CodeSnippetExpression.cs
- SyntaxCheck.cs
- RelationshipEndCollection.cs
- Pen.cs
- OdbcCommand.cs
- StylusTip.cs
- Pipe.cs
- TreeBuilderXamlTranslator.cs
- SqlFunctionAttribute.cs
- ProgressChangedEventArgs.cs
- CanonicalXml.cs
- XmlNodeComparer.cs
- BinaryNode.cs
- CodeDirectoryCompiler.cs
- UseLicense.cs
- DataGridBoolColumn.cs
- GlyphingCache.cs
- ListenerConstants.cs
- AppDomainProtocolHandler.cs
- WithStatement.cs
- Variant.cs
- GZipStream.cs
- ImageMap.cs
- TakeOrSkipWhileQueryOperator.cs
- CapabilitiesRule.cs
- VariableReference.cs
- ItemDragEvent.cs
- DataTableReaderListener.cs
- DefaultIfEmptyQueryOperator.cs
- HtmlInputImage.cs
- AsymmetricSignatureDeformatter.cs
- Point.cs
- Listbox.cs
- ClientSideQueueItem.cs
- TreeViewItemAutomationPeer.cs
- XsdDataContractImporter.cs
- ResourcesChangeInfo.cs
- ResourceDefaultValueAttribute.cs
- HtmlInputFile.cs
- NGCUIElementCollectionSerializerAsync.cs
- ImageListImage.cs
- CodeIdentifier.cs
- UrlRoutingModule.cs
- Italic.cs
- AsyncStreamReader.cs
- SortedSet.cs
- RoleGroup.cs
- FormViewRow.cs
- SiteMapNodeItemEventArgs.cs
- OleDbCommand.cs
- TrackingWorkflowEventArgs.cs
- DataSourceHelper.cs
- CalendarDesigner.cs
- DesignerUtils.cs
- ObjectSecurity.cs
- SizeAnimationClockResource.cs
- DataViewManagerListItemTypeDescriptor.cs
- SmtpClient.cs
- StackBuilderSink.cs
- CaseStatementSlot.cs
- SqlDataSourceCommandEventArgs.cs
- ImageSource.cs
- HtmlElement.cs
- Graph.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- ConvertEvent.cs
- RoleBoolean.cs
- RenderContext.cs
- TaskHelper.cs
- MenuAdapter.cs
- Options.cs
- DefaultBindingPropertyAttribute.cs
- FlagsAttribute.cs
- ErrorFormatterPage.cs
- SqlMetaData.cs
- SystemDiagnosticsSection.cs
- ToggleProviderWrapper.cs
- FixedSOMTableCell.cs
- NativeMethods.cs
- ConsoleKeyInfo.cs
- ContextCorrelationInitializer.cs
- IImplicitResourceProvider.cs
- xmlsaver.cs
- LoginView.cs
- MultiSelectRootGridEntry.cs
- XmlReader.cs
- HebrewNumber.cs
- BindableAttribute.cs
- JapaneseLunisolarCalendar.cs
- PrivacyNoticeBindingElement.cs
- BitArray.cs
- CompilerResults.cs
- Size.cs
- CipherData.cs
- AppDomainCompilerProxy.cs
- SHA256Managed.cs
- _ChunkParse.cs
- Parameter.cs
- ArgumentsParser.cs
- EnumConverter.cs