Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / QueryRelOp.cs / 1 / QueryRelOp.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Dispatcher { using System.Collections; using System.ServiceModel.Channels; using System.Collections.Generic; using System.Diagnostics; internal enum RelationOperator { None, Eq, Ne, Gt, Ge, Lt, Le } ////// General relation opcode: compares any two values on the value stack /// internal class RelationOpcode : Opcode { protected RelationOperator op; internal RelationOpcode(RelationOperator op) : this(OpcodeID.Relation, op) { } protected RelationOpcode(OpcodeID id, RelationOperator op) : base(id) { this.op = op; } internal override bool Equals(Opcode op) { if (base.Equals(op)) { return (this.op == ((RelationOpcode)op).op); } return false; } internal override Opcode Eval(ProcessingContext context) { StackFrame argX = context.TopArg; StackFrame argY = context.SecondArg; DiagnosticUtility.DebugAssert(argX.Count == argY.Count, ""); Value[] values = context.Values; while (argX.basePtr <= argX.endPtr) { values[argY.basePtr].Update(context, values[argY.basePtr].CompareTo(ref values[argX.basePtr], op)); argX.basePtr++; argY.basePtr++; } context.PopFrame(); return this.next; } #if DEBUG_FILTER public override string ToString() { return string.Format("{0} {1}", base.ToString(), this.op.ToString()); } #endif } internal abstract class LiteralRelationOpcode : Opcode { internal LiteralRelationOpcode(OpcodeID id) : base(id) { this.flags |= OpcodeFlags.Literal; } #if NO internal abstract ValueDataType DataType { get; } #endif internal abstract object Literal { get; } #if DEBUG_FILTER public override string ToString() { return string.Format("{0} '{1}'", base.ToString(), this.Literal); } #endif } internal class StringEqualsOpcode: LiteralRelationOpcode { string literal; internal StringEqualsOpcode(string literal) : base(OpcodeID.StringEquals) { DiagnosticUtility.DebugAssert(null != literal, ""); this.literal = literal; } #if NO internal override ValueDataType DataType { get { return ValueDataType.String; } } #endif internal override object Literal { get { return this.literal; } } internal override void Add(Opcode op) { StringEqualsOpcode strEqOp = op as StringEqualsOpcode; if (null == strEqOp) { base.Add(op); return; } DiagnosticUtility.DebugAssert(null != this.prev, ""); StringEqualsBranchOpcode branch = new StringEqualsBranchOpcode(); this.prev.Replace(this, branch); branch.Add(this); branch.Add(strEqOp); } internal override bool Equals(Opcode op) { if (base.Equals (op)) { StringEqualsOpcode strEqOp = (StringEqualsOpcode) op; return (strEqOp.literal == this.literal); } return false; } internal override Opcode Eval(ProcessingContext context) { Value[] values = context.Values; StackFrame arg = context.TopArg; if (1 == arg.Count) { values[arg.basePtr].Update(context, values[arg.basePtr].Equals(this.literal)); } else { for (int i = arg.basePtr; i <= arg.endPtr; ++i) { values[i].Update(context, values[i].Equals(this.literal)); } } return this.next; } } internal class NumberEqualsOpcode: LiteralRelationOpcode { double literal; internal NumberEqualsOpcode(double literal) : base(OpcodeID.NumberEquals) { this.literal = literal; } #if NO internal override ValueDataType DataType { get { return ValueDataType.Double; } } #endif internal override object Literal { get { return this.literal; } } internal override void Add(Opcode op) { NumberEqualsOpcode numEqOp = op as NumberEqualsOpcode; if (null == numEqOp) { base.Add(op); return; } DiagnosticUtility.DebugAssert(null != this.prev, ""); NumberEqualsBranchOpcode branch = new NumberEqualsBranchOpcode(); this.prev.Replace(this, branch); branch.Add(this); branch.Add(numEqOp); } internal override bool Equals(Opcode op) { if (base.Equals (op)) { NumberEqualsOpcode numEqOp = (NumberEqualsOpcode) op; return (numEqOp.literal == this.literal); } return false; } internal override Opcode Eval(ProcessingContext context) { Value[] values = context.Values; StackFrame arg = context.TopArg; if (1 == arg.Count) { values[arg.basePtr].Update(context, values[arg.basePtr].Equals(this.literal)); } else { for (int i = arg.basePtr; i <= arg.endPtr; ++i) { values[i].Update(context, values[i].Equals(this.literal)); } } return this.next; } } internal abstract class HashBranchIndex : QueryBranchIndex { Dictionary
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RoleManagerEventArgs.cs
- GlobalItem.cs
- SafeHandle.cs
- ConfigXmlElement.cs
- InfoCardAsymmetricCrypto.cs
- _AcceptOverlappedAsyncResult.cs
- MenuItemBindingCollection.cs
- Component.cs
- SafeNativeMethods.cs
- ElementProxy.cs
- ApplicationContext.cs
- TextTreeExtractElementUndoUnit.cs
- DataSvcMapFile.cs
- DesignerToolboxInfo.cs
- Size3D.cs
- DateTimeValueSerializerContext.cs
- MimeReturn.cs
- FileChangesMonitor.cs
- ActivatableWorkflowsQueryResult.cs
- Rectangle.cs
- WebPartMenu.cs
- LinqDataSourceEditData.cs
- MailWebEventProvider.cs
- SafeEventLogReadHandle.cs
- ActiveXSite.cs
- DES.cs
- DebugHandleTracker.cs
- AstTree.cs
- storepermissionattribute.cs
- ItemType.cs
- HttpProcessUtility.cs
- ExecutionContext.cs
- DataGridViewAccessibleObject.cs
- ResourceManager.cs
- XmlQuerySequence.cs
- TransformGroup.cs
- NotSupportedException.cs
- sortedlist.cs
- _HelperAsyncResults.cs
- TextMarkerSource.cs
- EntityViewGenerator.cs
- RepeaterItemEventArgs.cs
- SynchronousChannelMergeEnumerator.cs
- X509UI.cs
- RightNameExpirationInfoPair.cs
- FunctionUpdateCommand.cs
- BitmapEffectDrawingContextState.cs
- RunInstallerAttribute.cs
- DataListCommandEventArgs.cs
- UserControl.cs
- JsonEnumDataContract.cs
- WebPartCloseVerb.cs
- SqlMethods.cs
- PeerSecurityManager.cs
- TextFormatterHost.cs
- HashMembershipCondition.cs
- PropertyKey.cs
- CodePageUtils.cs
- Deserializer.cs
- BlurBitmapEffect.cs
- DataFormats.cs
- BrowserDefinitionCollection.cs
- ObjectListItem.cs
- WebRequestModulesSection.cs
- SecurityElement.cs
- Label.cs
- StringFormat.cs
- KeyValueConfigurationElement.cs
- DecimalKeyFrameCollection.cs
- COM2IPerPropertyBrowsingHandler.cs
- sqlser.cs
- InertiaExpansionBehavior.cs
- CacheOutputQuery.cs
- followingquery.cs
- OutputScopeManager.cs
- AbstractExpressions.cs
- ExpressionPrefixAttribute.cs
- TreeNodeBinding.cs
- EndOfStreamException.cs
- EntityTypeEmitter.cs
- GifBitmapEncoder.cs
- ExpressionNode.cs
- AttributeSetAction.cs
- BStrWrapper.cs
- PriorityChain.cs
- InputChannelAcceptor.cs
- MappingMetadataHelper.cs
- DesignTimeSiteMapProvider.cs
- WSFederationHttpBindingElement.cs
- EndOfStreamException.cs
- ContentDisposition.cs
- MemberCollection.cs
- PropertyManager.cs
- MultilineStringConverter.cs
- XmlUTF8TextReader.cs
- KnownBoxes.cs
- ADRole.cs
- DataGridViewColumnEventArgs.cs
- Point3DConverter.cs
- XmlEntityReference.cs