Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / NegationPusher.cs / 1305376 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- _SslSessionsCache.cs
- FormViewUpdateEventArgs.cs
- TypeInitializationException.cs
- ColorDialog.cs
- RawStylusInputReport.cs
- SelectedPathEditor.cs
- PropertyConverter.cs
- KnownBoxes.cs
- ADConnectionHelper.cs
- TcpChannelHelper.cs
- XPathAncestorQuery.cs
- Pointer.cs
- DocumentGridPage.cs
- Form.cs
- Function.cs
- RadioButtonList.cs
- UriTemplateEquivalenceComparer.cs
- ToolBarDesigner.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- SelectionEditor.cs
- BindingWorker.cs
- GlyphRunDrawing.cs
- TextProperties.cs
- StylusShape.cs
- OperandQuery.cs
- XmlElementCollection.cs
- XmlNode.cs
- HierarchicalDataBoundControl.cs
- Hash.cs
- MsmqSecureHashAlgorithm.cs
- ResourceDefaultValueAttribute.cs
- ImageCodecInfoPrivate.cs
- XmlTypeMapping.cs
- WindowsToolbarItemAsMenuItem.cs
- Literal.cs
- ComponentCommands.cs
- GenericUriParser.cs
- FrameworkElementFactoryMarkupObject.cs
- Geometry3D.cs
- ToolStripStatusLabel.cs
- WebHttpElement.cs
- Transform.cs
- DispatcherEventArgs.cs
- PointHitTestParameters.cs
- Filter.cs
- SharedDp.cs
- ITreeGenerator.cs
- SelectionEditingBehavior.cs
- ImportOptions.cs
- SQLInt64Storage.cs
- PaintValueEventArgs.cs
- AssociatedControlConverter.cs
- Sequence.cs
- InfoCardSymmetricCrypto.cs
- DateBoldEvent.cs
- BinaryFormatter.cs
- IdentityHolder.cs
- GrammarBuilderRuleRef.cs
- FullTextState.cs
- HttpFileCollection.cs
- HitTestFilterBehavior.cs
- QilChoice.cs
- SchemaImporter.cs
- ImageMap.cs
- PolyLineSegmentFigureLogic.cs
- EncryptedXml.cs
- LocalizableAttribute.cs
- XmlQueryContext.cs
- NewItemsContextMenuStrip.cs
- EntityContainerEmitter.cs
- SubstitutionList.cs
- WebPartTransformerAttribute.cs
- ToolStripRendererSwitcher.cs
- CacheHelper.cs
- DocumentViewerConstants.cs
- ProcessModelSection.cs
- BaseUriWithWildcard.cs
- PathNode.cs
- TransformProviderWrapper.cs
- Region.cs
- ArrayList.cs
- ByteConverter.cs
- _StreamFramer.cs
- HitTestWithPointDrawingContextWalker.cs
- OdbcConnectionHandle.cs
- PageBuildProvider.cs
- X509ThumbprintKeyIdentifierClause.cs
- DataDocumentXPathNavigator.cs
- Ipv6Element.cs
- FilePrompt.cs
- GridViewUpdatedEventArgs.cs
- FixedSOMLineRanges.cs
- RegistryPermission.cs
- FixedNode.cs
- RemoteWebConfigurationHost.cs
- PolicyImporterElementCollection.cs
- ConnectionPoint.cs
- TextWriterEngine.cs
- Point4D.cs
- OpenFileDialog.cs