Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / MS / Internal / PartialArray.cs / 1 / PartialArray.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // Description: The PartialArray struct is used when the developer needs to pass a CLR array range to // a function that takes generic IList interface. For cases when the whole array needs to be passed, // CLR array already implements IList. // // // History: // 06/25/2004 : [....] - Created // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; namespace MS.Internal { ////// The PartialArray struct is used when someone needs to pass a CLR array range to /// a function that takes generic IList interface. For cases when the whole array needs to be passed, /// CLR array already implements IList. /// internal struct PartialArray: IList { private T[] _array; private int _initialIndex; private int _count; public PartialArray(T[] array, int initialIndex, int count) { // make sure early that the caller didn't miscalculate index and count Debug.Assert(initialIndex >= 0 && initialIndex + count <= array.Length); _array = array; _initialIndex = initialIndex; _count = count; } /// /// Convenience helper for passing the whole array. /// /// public PartialArray(T[] array) : this(array, 0, array.Length) {} #region IListMembers public bool IsReadOnly { get { return false; } } public bool Contains(T item) { return IndexOf(item) >= 0; } public bool IsFixedSize { get { return true; } } public bool Remove(T item) { throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } public void RemoveAt(int index) { throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } public void Clear() { throw new NotSupportedException(); } public void Add(T item) { throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } public void Insert(int index, T item) { throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } public T this[int index] { get { return _array[index + _initialIndex]; } set { _array[index + _initialIndex] = value; } } public int IndexOf(T item) { int index = Array.IndexOf (_array, item, _initialIndex, _count); if (index >= 0) { return index - _initialIndex; } else { return -1; } } #endregion #region ICollection Members public int Count { get { return _count; } } public void CopyTo(T[] array, int arrayIndex) { // parameter validations if (array == null) { throw new ArgumentNullException("array"); } if (array.Rank != 1) { throw new ArgumentException( SR.Get(SRID.Collection_CopyTo_ArrayCannotBeMultidimensional), "array"); } if (arrayIndex < 0) { throw new ArgumentOutOfRangeException("arrayIndex"); } if (arrayIndex >= array.Length) { throw new ArgumentException( SR.Get( SRID.Collection_CopyTo_IndexGreaterThanOrEqualToArrayLength, "arrayIndex", "array"), "arrayIndex"); } if ((array.Length - Count - arrayIndex) < 0) { throw new ArgumentException( SR.Get( SRID.Collection_CopyTo_NumberOfElementsExceedsArrayLength, "arrayIndex", "array")); } // do the copying here for (int i = 0; i < Count; i++) { array[arrayIndex + i] = this[i]; } } #endregion #region IEnumerable Members IEnumerator IEnumerable .GetEnumerator() { for (int i = 0; i < Count; i++) { yield return this[i]; } } #endregion #region IEnumerable Members IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable )this).GetEnumerator(); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- wgx_sdk_version.cs
- FileStream.cs
- DesignerTransaction.cs
- CodeTypeReference.cs
- FloaterParagraph.cs
- AccessDataSourceWizardForm.cs
- SqlClientFactory.cs
- RawAppCommandInputReport.cs
- ActivationArguments.cs
- AspNetPartialTrustHelpers.cs
- BinaryOperationBinder.cs
- AggregatePushdown.cs
- EventSinkHelperWriter.cs
- ExpressionNode.cs
- TableChangeProcessor.cs
- ProcessingInstructionAction.cs
- UIElementCollection.cs
- FixedSOMFixedBlock.cs
- Splitter.cs
- ISAPIWorkerRequest.cs
- Part.cs
- CustomAttributeSerializer.cs
- WindowsNonControl.cs
- OdbcRowUpdatingEvent.cs
- DBConcurrencyException.cs
- DesigntimeLicenseContextSerializer.cs
- ProgressBarHighlightConverter.cs
- FixedPageAutomationPeer.cs
- TrackingProfileCache.cs
- ObjectContextServiceProvider.cs
- EntityDataSourceChangingEventArgs.cs
- AsyncResult.cs
- StrokeFIndices.cs
- SpecialTypeDataContract.cs
- PartialArray.cs
- CommonObjectSecurity.cs
- CodeThrowExceptionStatement.cs
- Command.cs
- StretchValidation.cs
- GrammarBuilderBase.cs
- DecoderNLS.cs
- SimpleType.cs
- DataSetUtil.cs
- MDIWindowDialog.cs
- QilFunction.cs
- InstallerTypeAttribute.cs
- ImageIndexEditor.cs
- TextParagraphCache.cs
- CodeParameterDeclarationExpression.cs
- Select.cs
- QilPatternVisitor.cs
- ConversionContext.cs
- TokenBasedSet.cs
- MarshalDirectiveException.cs
- HtmlTextBoxAdapter.cs
- MsiStyleLogWriter.cs
- TextAdaptor.cs
- CommandBinding.cs
- WindowsButton.cs
- SmtpAuthenticationManager.cs
- Events.cs
- DynamicRendererThreadManager.cs
- DateTimeOffset.cs
- MatrixValueSerializer.cs
- FileCodeGroup.cs
- LiteralControl.cs
- HttpCacheVaryByContentEncodings.cs
- ToolStripRenderer.cs
- PerformanceCounterPermissionAttribute.cs
- StateBag.cs
- OpenTypeMethods.cs
- Formatter.cs
- FormViewInsertedEventArgs.cs
- Automation.cs
- RelationshipConverter.cs
- EntitySqlQueryState.cs
- TcpChannelHelper.cs
- ParserContext.cs
- RegexGroup.cs
- SelectionPattern.cs
- SkinBuilder.cs
- WebHttpElement.cs
- ResourceReader.cs
- FacetValues.cs
- EventLogEntry.cs
- OutputCacheModule.cs
- SessionPageStateSection.cs
- OleDbFactory.cs
- DateTime.cs
- PropertyGridView.cs
- safex509handles.cs
- WeakRefEnumerator.cs
- WebRequest.cs
- StateWorkerRequest.cs
- RegexBoyerMoore.cs
- UnsignedPublishLicense.cs
- DataGridViewButtonColumn.cs
- RootBuilder.cs
- ListParaClient.cs
- TimeoutConverter.cs