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
- WebPartConnectionsCancelVerb.cs
- CodeAttributeDeclaration.cs
- ListBindingHelper.cs
- ExpressionNode.cs
- HitTestParameters.cs
- WebPartDesigner.cs
- PassportIdentity.cs
- DataSourceView.cs
- SpoolingTaskBase.cs
- HierarchicalDataTemplate.cs
- ParseChildrenAsPropertiesAttribute.cs
- CommandTreeTypeHelper.cs
- DesignTimeHTMLTextWriter.cs
- ToolboxBitmapAttribute.cs
- IPAddressCollection.cs
- TextLine.cs
- TransformCryptoHandle.cs
- SqlFormatter.cs
- HostingEnvironmentSection.cs
- CompiledQueryCacheKey.cs
- SqlComparer.cs
- TextEditorDragDrop.cs
- SessionStateSection.cs
- PartialArray.cs
- PermissionRequestEvidence.cs
- PenLineCapValidation.cs
- DBSchemaTable.cs
- HttpResponseWrapper.cs
- TransactionProxy.cs
- SimpleBitVector32.cs
- StorageRoot.cs
- ErrorRuntimeConfig.cs
- InfoCardSymmetricAlgorithm.cs
- GregorianCalendarHelper.cs
- Transactions.cs
- ListView.cs
- DataGridViewLayoutData.cs
- SessionEndingCancelEventArgs.cs
- ModelService.cs
- BinaryReader.cs
- CanonicalFontFamilyReference.cs
- SqlParameterCollection.cs
- ApplicationDirectory.cs
- Model3D.cs
- Int32KeyFrameCollection.cs
- Socket.cs
- SmtpReplyReaderFactory.cs
- BuildTopDownAttribute.cs
- DragDrop.cs
- SiteMap.cs
- ExceptionWrapper.cs
- BmpBitmapEncoder.cs
- HashMembershipCondition.cs
- InternalsVisibleToAttribute.cs
- SamlSecurityTokenAuthenticator.cs
- XpsSerializationManager.cs
- PageParser.cs
- XmlNode.cs
- Certificate.cs
- XmlMemberMapping.cs
- ChannelManagerBase.cs
- DataGridTablesFactory.cs
- _Events.cs
- ToolStripDropDown.cs
- IIS7ConfigurationLoader.cs
- ControlPaint.cs
- PackagingUtilities.cs
- Timeline.cs
- SessionEndedEventArgs.cs
- TextElementEnumerator.cs
- TreeBuilderBamlTranslator.cs
- XmlSchemaDatatype.cs
- SystemColorTracker.cs
- TempFiles.cs
- EpmContentSerializerBase.cs
- CodeMemberMethod.cs
- XPathNodeInfoAtom.cs
- DocumentViewerAutomationPeer.cs
- MemberAccessException.cs
- HandoffBehavior.cs
- XMLUtil.cs
- Int32.cs
- EnvironmentPermission.cs
- OrderedDictionaryStateHelper.cs
- HttpListener.cs
- AudioFileOut.cs
- SqlServer2KCompatibilityCheck.cs
- Wizard.cs
- SrgsDocument.cs
- AddressUtility.cs
- XmlTextEncoder.cs
- DocumentGridContextMenu.cs
- TextTreeTextBlock.cs
- DriveInfo.cs
- XmlUTF8TextReader.cs
- CodeGenerator.cs
- ButtonField.cs
- EastAsianLunisolarCalendar.cs
- AspProxy.cs
- TextWriter.cs