Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / MatchSingleFxEngineOpcode.cs / 1 / MatchSingleFxEngineOpcode.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Dispatcher { using System; using System.ServiceModel.Channels; using System.Collections.Generic; using System.Xml; using System.Xml.XPath; using System.Diagnostics; ////// Opcode that evaluates a single xpath query using the framework engine /// internal class MatchSingleFxEngineOpcode : QueryResultOpcode { XPathExpression xpath; XPathMessageFilter filter; internal MatchSingleFxEngineOpcode() : base(OpcodeID.MatchSingleFx) { this.flags |= OpcodeFlags.FxMatch; } internal XPathMessageFilter Filter { #if NO get { return this.filter; } #endif set { this.filter = value; } } internal XPathExpression XPath { #if NO get { return this.xpath; } #endif set { this.xpath = value; } } internal override void CollectXPathFilters(ICollectionfilters) { filters.Add(filter); } internal override bool Equals(Opcode op) { return false; } internal override Opcode Eval(ProcessingContext context) { DiagnosticUtility.DebugAssert(null != this.xpath, ""); SeekableXPathNavigator targetNav = context.Processor.ContextNode; #if FILTER_SELECT if (context.Processor.IsMatch) { #endif bool result = this.Match(targetNav); context.Processor.Result = result; if (result && null != this.filter && null != context.Processor.ResultSet) { context.Processor.ResultSet.Add(this.filter); } #if FILTER_SELECT } else if (context.Processor.IsSelect) { context.Processor.SelectResults = this.Select(targetNav); } #endif return this.next; } internal object Evaluate(XPathNavigator nav) { SeekableMessageNavigator messageNav = nav as SeekableMessageNavigator; if (null != messageNav) { // If operating on messages, we would have avoided atomizing unless we were using the Framework // This ensures that atomization has taken place messageNav.Atomize(); } object evalResult; if (XPathResultType.NodeSet == xpath.ReturnType) { evalResult = nav.Select(xpath); } else { evalResult = nav.Evaluate(xpath); } return evalResult; } internal bool Match(XPathNavigator nav) { bool retVal; object evalResult = this.Evaluate(nav); switch (xpath.ReturnType) { default: retVal = false; break; case XPathResultType.Any: retVal = (null != evalResult); break; case XPathResultType.Boolean: retVal = (bool)evalResult; break; case XPathResultType.NodeSet: XPathNodeIterator iterator = (XPathNodeIterator) evalResult; retVal = (null != iterator && iterator.Count > 0); break; case XPathResultType.Number: retVal = (((double)evalResult) != 0.0); break; case XPathResultType.String: string strVal = (string)evalResult; retVal = (null != strVal && strVal.Length > 0); // see XPath 1.0 break; } return retVal; } internal string Select(XPathNavigator nav) { string retVal = string.Empty; object evalResult = this.Evaluate(nav); switch (xpath.ReturnType) { default: break; case XPathResultType.Boolean: retVal = QueryValueModel.String((bool)evalResult); break; case XPathResultType.NodeSet: XPathNodeIterator iterator = (XPathNodeIterator) evalResult; if (iterator.MoveNext()) { retVal = iterator.Current.Value; } break; case XPathResultType.Number: retVal = QueryValueModel.String((double) evalResult); break; case XPathResultType.String: retVal = (string)evalResult; break; } return retVal; } } } // 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
- EditorZoneBase.cs
- ChangeNode.cs
- ClusterRegistryConfigurationProvider.cs
- HtmlMeta.cs
- basecomparevalidator.cs
- MenuItemBindingCollection.cs
- UpdateTranslator.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- HttpModulesInstallComponent.cs
- OdbcEnvironmentHandle.cs
- AssemblyResolver.cs
- PointUtil.cs
- CellPartitioner.cs
- ArgIterator.cs
- DependencyPropertyKey.cs
- OleDbException.cs
- WCFModelStrings.Designer.cs
- DescendantQuery.cs
- XmlILConstructAnalyzer.cs
- MemberMaps.cs
- StateWorkerRequest.cs
- XmlObjectSerializerReadContextComplex.cs
- BridgeDataReader.cs
- XmlSchemaElement.cs
- ValueQuery.cs
- Baml2006ReaderFrame.cs
- ForeignKeyFactory.cs
- PreservationFileWriter.cs
- TreeNodeBindingCollection.cs
- ProfilePropertySettings.cs
- SevenBitStream.cs
- DetailsViewCommandEventArgs.cs
- SectionRecord.cs
- CollectionEditor.cs
- DbConnectionInternal.cs
- InvokeSchedule.cs
- ProxyWebPart.cs
- PasswordRecoveryAutoFormat.cs
- WebBrowserNavigatingEventHandler.cs
- TrustManager.cs
- ObjectQueryExecutionPlan.cs
- DesignerSerializationVisibilityAttribute.cs
- CoTaskMemUnicodeSafeHandle.cs
- DetailsViewPageEventArgs.cs
- LoginAutoFormat.cs
- Quaternion.cs
- CommonObjectSecurity.cs
- ToolStripDropDownClosingEventArgs.cs
- iisPickupDirectory.cs
- FacetChecker.cs
- Enum.cs
- ContextQuery.cs
- DrawingGroup.cs
- DecoderFallbackWithFailureFlag.cs
- MLangCodePageEncoding.cs
- SynchronizationValidator.cs
- FontNamesConverter.cs
- StorageConditionPropertyMapping.cs
- HighlightVisual.cs
- SqlClientMetaDataCollectionNames.cs
- ComEventsSink.cs
- Size3D.cs
- JsonFormatGeneratorStatics.cs
- DataGridViewComboBoxColumnDesigner.cs
- PinnedBufferMemoryStream.cs
- ProfileManager.cs
- ValidatorCollection.cs
- Preprocessor.cs
- HwndKeyboardInputProvider.cs
- Process.cs
- HtmlForm.cs
- BitmapEffectInput.cs
- ThrowOnMultipleAssignment.cs
- EasingQuaternionKeyFrame.cs
- Border.cs
- CompiledAction.cs
- _DigestClient.cs
- GroupBoxRenderer.cs
- LineServices.cs
- PipeSecurity.cs
- MDIControlStrip.cs
- TextElementCollection.cs
- WebBrowserEvent.cs
- IISMapPath.cs
- SchemaImporter.cs
- PlainXmlWriter.cs
- ContractAdapter.cs
- FormatSettings.cs
- DetailsViewRowCollection.cs
- TimelineCollection.cs
- RenderingEventArgs.cs
- CheckBox.cs
- PersistenceTypeAttribute.cs
- ClientProxyGenerator.cs
- MarkupExtensionParser.cs
- HttpCacheVaryByContentEncodings.cs
- Send.cs
- SimpleBitVector32.cs
- Html32TextWriter.cs
- WaitForChangedResult.cs