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
- ViewLoader.cs
- ClientScriptItem.cs
- Int32CollectionConverter.cs
- Perspective.cs
- BoundColumn.cs
- ClickablePoint.cs
- PropertyIDSet.cs
- SignatureConfirmations.cs
- ZipPackage.cs
- X509Chain.cs
- IOThreadTimer.cs
- TextElement.cs
- DataControlField.cs
- TableLayout.cs
- ReverseInheritProperty.cs
- EdmProperty.cs
- ScopelessEnumAttribute.cs
- XPathDocumentBuilder.cs
- ScriptingAuthenticationServiceSection.cs
- ProfilePropertySettings.cs
- PageEventArgs.cs
- IsolatedStorage.cs
- UnicodeEncoding.cs
- WorkflowWebService.cs
- Group.cs
- DecimalConverter.cs
- EntitySqlQueryCacheKey.cs
- XmlSchemaSimpleContentRestriction.cs
- FontConverter.cs
- AttributeXamlType.cs
- TraceXPathNavigator.cs
- PrintPreviewDialog.cs
- DictionaryBase.cs
- QilStrConcatenator.cs
- RemoteWebConfigurationHostServer.cs
- BinaryExpression.cs
- EventsTab.cs
- SecurityKeyIdentifierClause.cs
- TCPListener.cs
- UInt64Storage.cs
- SettingsProperty.cs
- XPathMultyIterator.cs
- SerializationInfoEnumerator.cs
- PenThreadWorker.cs
- ZipIOLocalFileDataDescriptor.cs
- ApplicationException.cs
- _SslState.cs
- versioninfo.cs
- RecordConverter.cs
- EntityKey.cs
- ConnectionProviderAttribute.cs
- TrackingProfile.cs
- SchemaTableColumn.cs
- ValidationEventArgs.cs
- Event.cs
- Privilege.cs
- EventRoute.cs
- GridViewColumn.cs
- LayoutManager.cs
- RightsController.cs
- JoinTreeSlot.cs
- WebServiceParameterData.cs
- EventLogQuery.cs
- COM2ColorConverter.cs
- ByteKeyFrameCollection.cs
- SchemaImporterExtensionElement.cs
- WebPartConnectionCollection.cs
- SchemaImporterExtensionElementCollection.cs
- XsdDuration.cs
- EntityDataSourceMemberPath.cs
- PrintDialogException.cs
- Stroke2.cs
- RoutingConfiguration.cs
- TrustLevel.cs
- DataList.cs
- ValueUtilsSmi.cs
- RootBrowserWindowAutomationPeer.cs
- SqlDataReaderSmi.cs
- M3DUtil.cs
- XamlBrushSerializer.cs
- PopOutPanel.cs
- SmtpAuthenticationManager.cs
- IResourceProvider.cs
- PageContent.cs
- EnvironmentPermission.cs
- ChangeTracker.cs
- Size3DValueSerializer.cs
- LabelExpression.cs
- Misc.cs
- GlobalizationAssembly.cs
- TextEncodedRawTextWriter.cs
- ConsoleCancelEventArgs.cs
- ForEachAction.cs
- UnsafeNativeMethods.cs
- WindowsListViewGroup.cs
- GeometryHitTestParameters.cs
- SystemSounds.cs
- TaiwanLunisolarCalendar.cs
- EraserBehavior.cs
- FloaterBaseParagraph.cs