Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / QIL / QilList.cs / 1305376 / QilList.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; namespace System.Xml.Xsl.Qil { ////// View over a Qil operator having N children. /// ////// Don't construct QIL nodes directly; instead, use the internal class QilList : QilNode { private int count; private QilNode[] members; //----------------------------------------------- // Constructor //----------------------------------------------- ///QilFactory . ////// Construct a new (empty) QilList /// public QilList(QilNodeType nodeType) : base(nodeType) { this.members = new QilNode[4]; this.xmlType = null; } //----------------------------------------------- // QilNode methods //----------------------------------------------- ////// Lazily create the XmlQueryType. /// public override XmlQueryType XmlType { get { if (this.xmlType == null) { XmlQueryType xt = XmlQueryTypeFactory.Empty; if (this.count > 0) { if (this.nodeType == QilNodeType.Sequence) { for (int i = 0; i < this.count; i++) xt = XmlQueryTypeFactory.Sequence(xt, this.members[i].XmlType); Debug.Assert(!xt.IsDod, "Sequences do not preserve DocOrderDistinct"); } else if (this.nodeType == QilNodeType.BranchList) { xt = this.members[0].XmlType; for (int i = 1; i < this.count; i++) xt = XmlQueryTypeFactory.Choice(xt, this.members[i].XmlType); } } this.xmlType = xt; } return this.xmlType; } } ////// Override in order to clone the "members" array. /// public override QilNode ShallowClone(QilFactory f) { QilList n = (QilList) MemberwiseClone(); n.members = (QilNode[]) this.members.Clone(); f.TraceNode(n); return n; } //----------------------------------------------- // IListmethods -- override //----------------------------------------------- public override int Count { get { return this.count; } } public override QilNode this[int index] { get { if (index >= 0 && index < this.count) return this.members[index]; throw new IndexOutOfRangeException(); } set { if (index >= 0 && index < this.count) this.members[index] = value; else throw new IndexOutOfRangeException(); // Invalidate XmlType this.xmlType = null; } } public override void Insert(int index, QilNode node) { if (index < 0 || index > this.count) throw new IndexOutOfRangeException(); if (this.count == this.members.Length) { QilNode[] membersNew = new QilNode[this.count * 2]; Array.Copy(this.members, membersNew, this.count); this.members = membersNew; } if (index < this.count) Array.Copy(this.members, index, this.members, index + 1, this.count - index); this.count++; this.members[index] = node; // Invalidate XmlType this.xmlType = null; } public override void RemoveAt(int index) { if (index < 0 || index >= this.count) throw new IndexOutOfRangeException(); this.count--; if (index < this.count) Array.Copy(this.members, index + 1, this.members, index, this.count - index); this.members[this.count] = null; // Invalidate XmlType this.xmlType = null; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; namespace System.Xml.Xsl.Qil { ////// View over a Qil operator having N children. /// ////// Don't construct QIL nodes directly; instead, use the internal class QilList : QilNode { private int count; private QilNode[] members; //----------------------------------------------- // Constructor //----------------------------------------------- ///QilFactory . ////// Construct a new (empty) QilList /// public QilList(QilNodeType nodeType) : base(nodeType) { this.members = new QilNode[4]; this.xmlType = null; } //----------------------------------------------- // QilNode methods //----------------------------------------------- ////// Lazily create the XmlQueryType. /// public override XmlQueryType XmlType { get { if (this.xmlType == null) { XmlQueryType xt = XmlQueryTypeFactory.Empty; if (this.count > 0) { if (this.nodeType == QilNodeType.Sequence) { for (int i = 0; i < this.count; i++) xt = XmlQueryTypeFactory.Sequence(xt, this.members[i].XmlType); Debug.Assert(!xt.IsDod, "Sequences do not preserve DocOrderDistinct"); } else if (this.nodeType == QilNodeType.BranchList) { xt = this.members[0].XmlType; for (int i = 1; i < this.count; i++) xt = XmlQueryTypeFactory.Choice(xt, this.members[i].XmlType); } } this.xmlType = xt; } return this.xmlType; } } ////// Override in order to clone the "members" array. /// public override QilNode ShallowClone(QilFactory f) { QilList n = (QilList) MemberwiseClone(); n.members = (QilNode[]) this.members.Clone(); f.TraceNode(n); return n; } //----------------------------------------------- // IListmethods -- override //----------------------------------------------- public override int Count { get { return this.count; } } public override QilNode this[int index] { get { if (index >= 0 && index < this.count) return this.members[index]; throw new IndexOutOfRangeException(); } set { if (index >= 0 && index < this.count) this.members[index] = value; else throw new IndexOutOfRangeException(); // Invalidate XmlType this.xmlType = null; } } public override void Insert(int index, QilNode node) { if (index < 0 || index > this.count) throw new IndexOutOfRangeException(); if (this.count == this.members.Length) { QilNode[] membersNew = new QilNode[this.count * 2]; Array.Copy(this.members, membersNew, this.count); this.members = membersNew; } if (index < this.count) Array.Copy(this.members, index, this.members, index + 1, this.count - index); this.count++; this.members[index] = node; // Invalidate XmlType this.xmlType = null; } public override void RemoveAt(int index) { if (index < 0 || index >= this.count) throw new IndexOutOfRangeException(); this.count--; if (index < this.count) Array.Copy(this.members, index + 1, this.members, index, this.count - index); this.members[this.count] = null; // Invalidate XmlType this.xmlType = null; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TimeSpanConverter.cs
- PageRouteHandler.cs
- SecurityHeaderLayout.cs
- HtmlListAdapter.cs
- ServerIdentity.cs
- XmlImplementation.cs
- IMembershipProvider.cs
- HttpWrapper.cs
- CodeSnippetCompileUnit.cs
- NullableLongAverageAggregationOperator.cs
- StylusPointProperties.cs
- RemoteWebConfigurationHostStream.cs
- RichTextBox.cs
- MultiView.cs
- KeyBinding.cs
- BamlRecordReader.cs
- DispatcherOperation.cs
- SqlClientWrapperSmiStreamChars.cs
- HtmlControl.cs
- DataObjectFieldAttribute.cs
- TypeElement.cs
- RegistryKey.cs
- DataGridClipboardHelper.cs
- StorageModelBuildProvider.cs
- DataFormat.cs
- Frame.cs
- StrongNameUtility.cs
- BulletedListEventArgs.cs
- OdbcParameterCollection.cs
- FlowDocumentPageViewerAutomationPeer.cs
- ListViewItemEventArgs.cs
- MaxSessionCountExceededException.cs
- AsyncOperation.cs
- SqlProviderServices.cs
- TokenFactoryCredential.cs
- SiteOfOriginPart.cs
- GridViewCellAutomationPeer.cs
- AsyncResult.cs
- NotConverter.cs
- WebEventTraceProvider.cs
- TCPListener.cs
- SqlTransaction.cs
- ControlLocalizer.cs
- KeyEvent.cs
- HttpCookie.cs
- precedingsibling.cs
- AtomPub10ServiceDocumentFormatter.cs
- StandardCommands.cs
- ActivityCollectionMarkupSerializer.cs
- XmlSchemaParticle.cs
- Matrix.cs
- Attributes.cs
- ExtenderProvidedPropertyAttribute.cs
- MarkupExtensionParser.cs
- DataGridViewColumnHeaderCell.cs
- PropertyDescriptorComparer.cs
- ExceptionCollection.cs
- HWStack.cs
- BoundField.cs
- NamedObjectList.cs
- CustomTypeDescriptor.cs
- ComponentRenameEvent.cs
- TraceSwitch.cs
- ReadingWritingEntityEventArgs.cs
- SafeArrayTypeMismatchException.cs
- TrimSurroundingWhitespaceAttribute.cs
- MSAAEventDispatcher.cs
- DesignerView.xaml.cs
- DefaultHttpHandler.cs
- CornerRadiusConverter.cs
- SystemIdentity.cs
- TemplatePropertyEntry.cs
- ThicknessConverter.cs
- PageStatePersister.cs
- IgnoreFileBuildProvider.cs
- WrapPanel.cs
- EntityClientCacheEntry.cs
- PermissionListSet.cs
- GPStream.cs
- DataTemplateSelector.cs
- LabelAutomationPeer.cs
- AutomationTextAttribute.cs
- Int32EqualityComparer.cs
- PageCatalogPart.cs
- WorkflowClientDeliverMessageWrapper.cs
- MessageHeader.cs
- COM2IProvidePropertyBuilderHandler.cs
- TrackingServices.cs
- Queue.cs
- MessageFormatterConverter.cs
- ScriptIgnoreAttribute.cs
- DesignerWebPartChrome.cs
- documentsequencetextpointer.cs
- AddressAccessDeniedException.cs
- MarshalByValueComponent.cs
- PipeException.cs
- InternalDuplexBindingElement.cs
- NotifyInputEventArgs.cs
- AVElementHelper.cs
- StrokeSerializer.cs