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
- Transform3DGroup.cs
- RelationshipDetailsRow.cs
- CodeNamespaceImport.cs
- BinaryExpression.cs
- SafeNativeMethods.cs
- ellipse.cs
- NativeMethods.cs
- GroupBoxRenderer.cs
- ExpressionParser.cs
- PropertyOverridesTypeEditor.cs
- connectionpool.cs
- Registry.cs
- ResourcesBuildProvider.cs
- DBNull.cs
- InstanceBehavior.cs
- FieldInfo.cs
- ListViewTableRow.cs
- PrivateFontCollection.cs
- Menu.cs
- Rotation3DKeyFrameCollection.cs
- DrawingContextDrawingContextWalker.cs
- PenCursorManager.cs
- TextTreeTextElementNode.cs
- ScriptingScriptResourceHandlerSection.cs
- UncommonField.cs
- DefaultPropertyAttribute.cs
- Missing.cs
- DocumentViewerBaseAutomationPeer.cs
- FileVersionInfo.cs
- DataSourceSelectArguments.cs
- PrefixQName.cs
- StylusPointProperty.cs
- TreeViewCancelEvent.cs
- StopRoutingHandler.cs
- MonitorWrapper.cs
- BinaryFormatter.cs
- XPathItem.cs
- PhonemeConverter.cs
- AssemblyCacheEntry.cs
- ControlBuilderAttribute.cs
- MailBnfHelper.cs
- PropertyConverter.cs
- OutputScopeManager.cs
- XmlIlTypeHelper.cs
- SizeAnimationBase.cs
- UserControlDocumentDesigner.cs
- ProgressBar.cs
- _ConnectStream.cs
- SqlExpressionNullability.cs
- IpcPort.cs
- AssociationTypeEmitter.cs
- SmiGettersStream.cs
- UidManager.cs
- NameHandler.cs
- GACMembershipCondition.cs
- TreeNodeEventArgs.cs
- PageThemeBuildProvider.cs
- Win32SafeHandles.cs
- BigInt.cs
- IpcChannel.cs
- SimpleType.cs
- ArraySortHelper.cs
- CloseCryptoHandleRequest.cs
- X509Extension.cs
- DataGridViewComboBoxEditingControl.cs
- WriteTimeStream.cs
- DataGridItemAttachedStorage.cs
- HitTestFilterBehavior.cs
- ComPlusThreadInitializer.cs
- FamilyMapCollection.cs
- EdmType.cs
- CapabilitiesPattern.cs
- MimeWriter.cs
- ReferentialConstraint.cs
- JapaneseCalendar.cs
- TextDecorationUnitValidation.cs
- SmiTypedGetterSetter.cs
- AssociationTypeEmitter.cs
- ColumnWidthChangedEvent.cs
- CaretElement.cs
- SecurityContextSecurityTokenAuthenticator.cs
- DeferredReference.cs
- PointAnimationUsingKeyFrames.cs
- Model3D.cs
- HtmlValidatorAdapter.cs
- DateTimeFormatInfo.cs
- SynchronizationContext.cs
- SystemNetworkInterface.cs
- SrgsToken.cs
- TextBoxBase.cs
- WarningException.cs
- DescriptionAttribute.cs
- ConnectionStringsSection.cs
- WorkflowOwnerAsyncResult.cs
- FlowPosition.cs
- ModelVisual3D.cs
- UserMapPath.cs
- MatrixAnimationUsingKeyFrames.cs
- SortExpressionBuilder.cs
- BridgeDataRecord.cs