Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Xml / System / Xml / XPath / Internal / followingsibling.cs / 1 / followingsibling.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace MS.Internal.Xml.XPath { using System; using System.Xml; using System.Xml.XPath; using System.Diagnostics; using System.Collections.Generic; using StackNav = ClonableStack; internal sealed class FollSiblingQuery : BaseAxisQuery { StackNav elementStk; List parentStk; XPathNavigator nextInput; public FollSiblingQuery(Query qyInput, string name, string prefix, XPathNodeType type) : base (qyInput, name, prefix, type) { this.elementStk = new StackNav(); this.parentStk = new List (); } private FollSiblingQuery(FollSiblingQuery other) : base(other) { this.elementStk = other.elementStk.Clone(); this.parentStk = new List (other.parentStk); this.nextInput = Clone(other.nextInput); } public override void Reset() { elementStk.Clear(); parentStk.Clear(); nextInput = null; base.Reset(); } private bool Visited(XPathNavigator nav) { XPathNavigator parent = nav.Clone(); parent.MoveToParent(); for (int i = 0; i < parentStk.Count; i++) { if (parent.IsSamePosition(parentStk[i])) { return true; } } parentStk.Add(parent); return false; } private XPathNavigator FetchInput() { XPathNavigator input; do { input = qyInput.Advance(); if (input == null) { return null; } } while (Visited(input)); return input.Clone(); } public override XPathNavigator Advance() { while (true) { if (currentNode == null) { if (nextInput == null) { nextInput = FetchInput(); // This can happen at the begining and at the end } if (elementStk.Count == 0) { if (nextInput == null) { return null; } currentNode = nextInput; nextInput = FetchInput(); } else { currentNode = elementStk.Pop(); } } while (currentNode.IsDescendant(nextInput)) { elementStk.Push(currentNode); currentNode = nextInput; nextInput = qyInput.Advance(); if (nextInput != null) { nextInput = nextInput.Clone(); } } while (currentNode.MoveToNext()) { if (matches(currentNode)) { position++; return currentNode; } } currentNode = null; } } // Advance public override XPathNodeIterator Clone() { return new FollSiblingQuery(this); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace MS.Internal.Xml.XPath { using System; using System.Xml; using System.Xml.XPath; using System.Diagnostics; using System.Collections.Generic; using StackNav = ClonableStack; internal sealed class FollSiblingQuery : BaseAxisQuery { StackNav elementStk; List parentStk; XPathNavigator nextInput; public FollSiblingQuery(Query qyInput, string name, string prefix, XPathNodeType type) : base (qyInput, name, prefix, type) { this.elementStk = new StackNav(); this.parentStk = new List (); } private FollSiblingQuery(FollSiblingQuery other) : base(other) { this.elementStk = other.elementStk.Clone(); this.parentStk = new List (other.parentStk); this.nextInput = Clone(other.nextInput); } public override void Reset() { elementStk.Clear(); parentStk.Clear(); nextInput = null; base.Reset(); } private bool Visited(XPathNavigator nav) { XPathNavigator parent = nav.Clone(); parent.MoveToParent(); for (int i = 0; i < parentStk.Count; i++) { if (parent.IsSamePosition(parentStk[i])) { return true; } } parentStk.Add(parent); return false; } private XPathNavigator FetchInput() { XPathNavigator input; do { input = qyInput.Advance(); if (input == null) { return null; } } while (Visited(input)); return input.Clone(); } public override XPathNavigator Advance() { while (true) { if (currentNode == null) { if (nextInput == null) { nextInput = FetchInput(); // This can happen at the begining and at the end } if (elementStk.Count == 0) { if (nextInput == null) { return null; } currentNode = nextInput; nextInput = FetchInput(); } else { currentNode = elementStk.Pop(); } } while (currentNode.IsDescendant(nextInput)) { elementStk.Push(currentNode); currentNode = nextInput; nextInput = qyInput.Advance(); if (nextInput != null) { nextInput = nextInput.Clone(); } } while (currentNode.MoveToNext()) { if (matches(currentNode)) { position++; return currentNode; } } currentNode = null; } } // Advance public override XPathNodeIterator Clone() { return new FollSiblingQuery(this); } } } // 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
- Image.cs
- HandlerBase.cs
- XamlSerializerUtil.cs
- MemoryMappedFileSecurity.cs
- ArgIterator.cs
- FacetDescription.cs
- UshortList2.cs
- FixedSchema.cs
- LinqExpressionNormalizer.cs
- FillErrorEventArgs.cs
- DbConnectionPoolGroupProviderInfo.cs
- sqlnorm.cs
- AnnouncementEndpoint.cs
- ObjectDataSourceDisposingEventArgs.cs
- RowToFieldTransformer.cs
- CookieProtection.cs
- MorphHelper.cs
- CompiledIdentityConstraint.cs
- CheckBoxFlatAdapter.cs
- ToolBarPanel.cs
- CodeDirectiveCollection.cs
- OracleException.cs
- ToolStripControlHost.cs
- BitmapDecoder.cs
- GroupByQueryOperator.cs
- TreeViewHitTestInfo.cs
- IpcPort.cs
- UnaryExpressionHelper.cs
- BuilderPropertyEntry.cs
- InputScopeConverter.cs
- ListViewInsertEventArgs.cs
- RadioButtonDesigner.cs
- SqlGenericUtil.cs
- PropertyGrid.cs
- ProvidersHelper.cs
- DecimalFormatter.cs
- XMLSyntaxException.cs
- WriteTimeStream.cs
- OdbcDataReader.cs
- GregorianCalendar.cs
- UpdatePanelControlTrigger.cs
- AnnotationObservableCollection.cs
- Part.cs
- AssociationSetEnd.cs
- CardSpaceShim.cs
- JsonUriDataContract.cs
- DataStreams.cs
- TransferRequestHandler.cs
- XmlNullResolver.cs
- FixedTextPointer.cs
- OleDbPermission.cs
- DbDataRecord.cs
- QilLoop.cs
- SplineQuaternionKeyFrame.cs
- ConvertersCollection.cs
- ObjectToModelValueConverter.cs
- basevalidator.cs
- BidOverLoads.cs
- WebPartDeleteVerb.cs
- XslAstAnalyzer.cs
- UnsafeNativeMethods.cs
- XmlDataDocument.cs
- Accessible.cs
- SqlDataSourceCommandEventArgs.cs
- DataGridViewCellStyleConverter.cs
- DataList.cs
- BaseTransportHeaders.cs
- SessionPageStateSection.cs
- AuthenticationModuleElement.cs
- NonSerializedAttribute.cs
- MutexSecurity.cs
- MappingSource.cs
- ReverseInheritProperty.cs
- BufferedWebEventProvider.cs
- DataListItemCollection.cs
- BitmapFrame.cs
- ProgressBar.cs
- AsyncResult.cs
- SqlRecordBuffer.cs
- InstanceKeyCompleteException.cs
- OrderedDictionary.cs
- DataServiceQueryProvider.cs
- ColorMatrix.cs
- ResourceProviderFactory.cs
- GPRECTF.cs
- EntityCommand.cs
- Animatable.cs
- XmlNodeChangedEventArgs.cs
- ConnectorRouter.cs
- ClientConfigurationSystem.cs
- SrgsElementFactoryCompiler.cs
- WsdlWriter.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- CodeDOMProvider.cs
- EventLogEntry.cs
- UnsafeNativeMethods.cs
- DrawingImage.cs
- assemblycache.cs
- JavaScriptString.cs
- XmlCharCheckingReader.cs