Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / NegationPusher.cs / 2 / NegationPusher.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Linq; namespace System.Data.Common.Utils.Boolean { // Top-down push-down of negation in Boolean expressions. // - !(A or B) iff. !A and !B // - !(A and B) iff. !A or !B // - !!A iff. A // Uses two visitor classes: one to handle negated subtrees (essentially creates // an inverted tree) and one to handle non-negated subtrees (replicates until it // encounters NotExpr) internal static class NegationPusher { internal static BoolExpr> EliminateNot (BoolExpr > expression) { return expression.Accept(NonNegatedDomainConstraintTreeVisitor .Instance); } private class NonNegatedTreeVisitor : BasicVisitor { internal static readonly NonNegatedTreeVisitor Instance = new NonNegatedTreeVisitor (); protected NonNegatedTreeVisitor() { } internal override BoolExpr VisitNot(NotExpr expression) { return expression.Child.Accept(NegatedTreeVisitor .Instance); } } private class NegatedTreeVisitor : Visitor > { internal static readonly NegatedTreeVisitor Instance = new NegatedTreeVisitor (); protected NegatedTreeVisitor() { } internal override BoolExpr VisitTrue(TrueExpr expression) { return FalseExpr .Value; } internal override BoolExpr VisitFalse(FalseExpr expression) { return TrueExpr .Value; } internal override BoolExpr VisitTerm(TermExpr expression) { return new NotExpr (expression); } internal override BoolExpr VisitNot(NotExpr expression) { return expression.Child.Accept(NonNegatedTreeVisitor .Instance); } internal override BoolExpr VisitAnd(AndExpr expression) { return new OrExpr (expression.Children.Select(child => child.Accept(this))); } internal override BoolExpr VisitOr(OrExpr expression) { return new AndExpr (expression.Children.Select(child => child.Accept(this))); } } private class NonNegatedDomainConstraintTreeVisitor : NonNegatedTreeVisitor > { internal new static readonly NonNegatedDomainConstraintTreeVisitor Instance = new NonNegatedDomainConstraintTreeVisitor (); private NonNegatedDomainConstraintTreeVisitor() { } internal override BoolExpr > VisitNot(NotExpr > expression) { return expression.Child.Accept(NegatedDomainConstraintTreeVisitor .Instance); } } private class NegatedDomainConstraintTreeVisitor : NegatedTreeVisitor > { internal new static readonly NegatedDomainConstraintTreeVisitor Instance = new NegatedDomainConstraintTreeVisitor (); private NegatedDomainConstraintTreeVisitor() { } internal override BoolExpr > VisitNot(NotExpr > expression) { return expression.Child.Accept(NonNegatedDomainConstraintTreeVisitor .Instance); } internal override BoolExpr > VisitTerm(TermExpr > expression) { return new TermExpr >(expression.Identifier.InvertDomainConstraint()); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Linq; namespace System.Data.Common.Utils.Boolean { // Top-down push-down of negation in Boolean expressions. // - !(A or B) iff. !A and !B // - !(A and B) iff. !A or !B // - !!A iff. A // Uses two visitor classes: one to handle negated subtrees (essentially creates // an inverted tree) and one to handle non-negated subtrees (replicates until it // encounters NotExpr) internal static class NegationPusher { internal static BoolExpr> EliminateNot (BoolExpr > expression) { return expression.Accept(NonNegatedDomainConstraintTreeVisitor .Instance); } private class NonNegatedTreeVisitor : BasicVisitor { internal static readonly NonNegatedTreeVisitor Instance = new NonNegatedTreeVisitor (); protected NonNegatedTreeVisitor() { } internal override BoolExpr VisitNot(NotExpr expression) { return expression.Child.Accept(NegatedTreeVisitor .Instance); } } private class NegatedTreeVisitor : Visitor > { internal static readonly NegatedTreeVisitor Instance = new NegatedTreeVisitor (); protected NegatedTreeVisitor() { } internal override BoolExpr VisitTrue(TrueExpr expression) { return FalseExpr .Value; } internal override BoolExpr VisitFalse(FalseExpr expression) { return TrueExpr .Value; } internal override BoolExpr VisitTerm(TermExpr expression) { return new NotExpr (expression); } internal override BoolExpr VisitNot(NotExpr expression) { return expression.Child.Accept(NonNegatedTreeVisitor .Instance); } internal override BoolExpr VisitAnd(AndExpr expression) { return new OrExpr (expression.Children.Select(child => child.Accept(this))); } internal override BoolExpr VisitOr(OrExpr expression) { return new AndExpr (expression.Children.Select(child => child.Accept(this))); } } private class NonNegatedDomainConstraintTreeVisitor : NonNegatedTreeVisitor > { internal new static readonly NonNegatedDomainConstraintTreeVisitor Instance = new NonNegatedDomainConstraintTreeVisitor (); private NonNegatedDomainConstraintTreeVisitor() { } internal override BoolExpr > VisitNot(NotExpr > expression) { return expression.Child.Accept(NegatedDomainConstraintTreeVisitor .Instance); } } private class NegatedDomainConstraintTreeVisitor : NegatedTreeVisitor > { internal new static readonly NegatedDomainConstraintTreeVisitor Instance = new NegatedDomainConstraintTreeVisitor (); private NegatedDomainConstraintTreeVisitor() { } internal override BoolExpr > VisitNot(NotExpr > expression) { return expression.Child.Accept(NonNegatedDomainConstraintTreeVisitor .Instance); } internal override BoolExpr > VisitTerm(TermExpr > expression) { return new TermExpr >(expression.Identifier.InvertDomainConstraint()); } } } } // 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
- StorageMappingItemLoader.cs
- TextRangeBase.cs
- _AutoWebProxyScriptEngine.cs
- ConfigurationManagerInternal.cs
- HostVisual.cs
- metadatamappinghashervisitor.cs
- TrackingMemoryStreamFactory.cs
- ClientFormsAuthenticationMembershipProvider.cs
- FixedTextContainer.cs
- PageParser.cs
- RelationalExpressions.cs
- SectionInformation.cs
- DrawListViewSubItemEventArgs.cs
- QueryMatcher.cs
- WsdlInspector.cs
- ToolStripSplitButton.cs
- latinshape.cs
- QilVisitor.cs
- PolyBezierSegment.cs
- ISFClipboardData.cs
- SqlDataSourceDesigner.cs
- LocalizedNameDescriptionPair.cs
- Point3DAnimationUsingKeyFrames.cs
- DataGridViewCellParsingEventArgs.cs
- SvcMapFileSerializer.cs
- DoubleCollectionConverter.cs
- SignedXmlDebugLog.cs
- ScriptDescriptor.cs
- Encoder.cs
- TimeoutValidationAttribute.cs
- Exceptions.cs
- ToolStripPanelRenderEventArgs.cs
- XmlWrappingReader.cs
- ColorEditor.cs
- RequestCachePolicy.cs
- ConfigXmlText.cs
- ProviderConnectionPointCollection.cs
- PaintValueEventArgs.cs
- Vector3DCollectionConverter.cs
- XmlAttributes.cs
- IntSumAggregationOperator.cs
- SigningCredentials.cs
- Quad.cs
- DataSourceView.cs
- ReturnEventArgs.cs
- StylusPoint.cs
- MapPathBasedVirtualPathProvider.cs
- ColorMatrix.cs
- NavigationPropertyEmitter.cs
- SecurityChannel.cs
- ProxyGenerator.cs
- DataGridLinkButton.cs
- ParsedAttributeCollection.cs
- CodeNamespaceImportCollection.cs
- WindowsMenu.cs
- AuthenticationSection.cs
- PackageDigitalSignatureManager.cs
- LoginCancelEventArgs.cs
- WindowsSlider.cs
- ResourceCollectionInfo.cs
- FaultCallbackWrapper.cs
- Polygon.cs
- WpfXamlMember.cs
- ActivityDesignerLayoutSerializers.cs
- SqlMethodCallConverter.cs
- DesignerDataTable.cs
- Point4DConverter.cs
- Freezable.cs
- StickyNoteContentControl.cs
- DelayedRegex.cs
- HWStack.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- TimeStampChecker.cs
- WebBrowserBase.cs
- SyndicationSerializer.cs
- PageParserFilter.cs
- TableHeaderCell.cs
- SingleObjectCollection.cs
- DataContractAttribute.cs
- ProfileManager.cs
- ResourceManagerWrapper.cs
- OleStrCAMarshaler.cs
- SectionRecord.cs
- AnnotationResource.cs
- CompilerParameters.cs
- DataStreams.cs
- TextEditorCharacters.cs
- DesignerOptionService.cs
- TraceFilter.cs
- DataGridViewUtilities.cs
- EventToken.cs
- IdentityModelDictionary.cs
- SafePEFileHandle.cs
- TileBrush.cs
- ToolStripArrowRenderEventArgs.cs
- AttributeEmitter.cs
- NonSerializedAttribute.cs
- _Connection.cs
- EntityTypeEmitter.cs
- VersionConverter.cs