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
- UnsafeNativeMethods.cs
- _NegoStream.cs
- FormParameter.cs
- AssemblyAttributesGoHere.cs
- UpdatePanelControlTrigger.cs
- RadioButton.cs
- ExeContext.cs
- SyndicationDeserializer.cs
- ToolStripSplitStackLayout.cs
- CriticalHandle.cs
- ValidationErrorCollection.cs
- BinaryWriter.cs
- Group.cs
- Point4DValueSerializer.cs
- PeerName.cs
- DataGridAutoFormat.cs
- PropertyInformation.cs
- DbLambda.cs
- HitTestWithGeometryDrawingContextWalker.cs
- FillRuleValidation.cs
- InternalTypeHelper.cs
- SettingsAttributes.cs
- DataGridViewBand.cs
- XPathAxisIterator.cs
- CollectionView.cs
- JsonWriterDelegator.cs
- VisualStyleInformation.cs
- InvokeGenerator.cs
- CompressEmulationStream.cs
- EncoderFallback.cs
- ReadOnlyHierarchicalDataSource.cs
- Grammar.cs
- FontNamesConverter.cs
- CqlLexer.cs
- ClientProxyGenerator.cs
- FormatterConverter.cs
- SqlCachedBuffer.cs
- ACL.cs
- PenContext.cs
- CallSiteOps.cs
- EmbeddedMailObject.cs
- URLMembershipCondition.cs
- XPathParser.cs
- DependencyPropertyKey.cs
- ToolboxItemFilterAttribute.cs
- ControlParameter.cs
- SessionPageStatePersister.cs
- Assert.cs
- PhysicalFontFamily.cs
- FloatSumAggregationOperator.cs
- TranslateTransform.cs
- UnsafeNativeMethods.cs
- SqlNodeAnnotation.cs
- FixedSOMTableRow.cs
- CompositeDataBoundControl.cs
- StackBuilderSink.cs
- HttpApplicationStateWrapper.cs
- BuildProvidersCompiler.cs
- Console.cs
- NativeCompoundFileAPIs.cs
- SerialStream.cs
- FieldDescriptor.cs
- TransformGroup.cs
- AppDomainFactory.cs
- VScrollBar.cs
- InnerItemCollectionView.cs
- SafeFindHandle.cs
- EndpointConfigContainer.cs
- ExpressionConverter.cs
- DataGridViewCellStyle.cs
- ClientType.cs
- NavigatingCancelEventArgs.cs
- FormClosingEvent.cs
- Wildcard.cs
- ArrayHelper.cs
- MaterializeFromAtom.cs
- BoundingRectTracker.cs
- JoinCqlBlock.cs
- FlowLayoutSettings.cs
- StaticResourceExtension.cs
- CacheChildrenQuery.cs
- WebPartConnectionsEventArgs.cs
- DoubleSumAggregationOperator.cs
- securitycriticaldataformultiplegetandset.cs
- ObfuscationAttribute.cs
- HttpWebRequestElement.cs
- NetworkInformationPermission.cs
- MailBnfHelper.cs
- SamlNameIdentifierClaimResource.cs
- GeneratedCodeAttribute.cs
- ImageAttributes.cs
- ToolTipAutomationPeer.cs
- PrimarySelectionAdorner.cs
- SendKeys.cs
- Point.cs
- StrongNameKeyPair.cs
- SqlDependencyListener.cs
- FileIOPermission.cs
- PageStatePersister.cs
- MeasurementDCInfo.cs