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
- MsmqOutputMessage.cs
- MainMenu.cs
- WebPartHeaderCloseVerb.cs
- ProgressChangedEventArgs.cs
- SimpleApplicationHost.cs
- DragDeltaEventArgs.cs
- TypeDescriptor.cs
- TlsnegoTokenAuthenticator.cs
- Rotation3DKeyFrameCollection.cs
- ListItemCollection.cs
- UIPropertyMetadata.cs
- ViewSimplifier.cs
- HorizontalAlignConverter.cs
- DataFieldConverter.cs
- SchemaNamespaceManager.cs
- TextBoxBase.cs
- DeviceContexts.cs
- PopupControlService.cs
- ConfigXmlCDataSection.cs
- WizardStepBase.cs
- ProjectionCamera.cs
- State.cs
- BevelBitmapEffect.cs
- FloatUtil.cs
- EnumerableRowCollectionExtensions.cs
- SplitContainer.cs
- ConditionCollection.cs
- Registry.cs
- CompositeDesignerAccessibleObject.cs
- MenuAdapter.cs
- WinOEToolBoxItem.cs
- TreeBuilderBamlTranslator.cs
- SchemaNames.cs
- OracleEncoding.cs
- Matrix3D.cs
- EmptyEnumerator.cs
- BuildProvider.cs
- WebControlAdapter.cs
- XmlReflectionMember.cs
- XslTransformFileEditor.cs
- PeerNameRecord.cs
- ContextInformation.cs
- IBuiltInEvidence.cs
- HttpWebRequestElement.cs
- XmlDataSourceView.cs
- ObjectParameter.cs
- ExitEventArgs.cs
- PermissionSetTriple.cs
- MulticastDelegate.cs
- Deflater.cs
- AccessibilityApplicationManager.cs
- Debugger.cs
- BamlLocalizableResourceKey.cs
- DrawingContextDrawingContextWalker.cs
- CollectionBuilder.cs
- HyperLinkDesigner.cs
- ConfigurationProperty.cs
- Message.cs
- NumberSubstitution.cs
- QuaternionConverter.cs
- NamespaceImport.cs
- CodeDefaultValueExpression.cs
- XsdDuration.cs
- TaskFormBase.cs
- StringWriter.cs
- DelegateTypeInfo.cs
- InkCanvasSelectionAdorner.cs
- DataGridViewMethods.cs
- SystemKeyConverter.cs
- TextFindEngine.cs
- RecordBuilder.cs
- AppDomainAttributes.cs
- SecurityResources.cs
- MetricEntry.cs
- VisualBasicSettingsHandler.cs
- PackagePart.cs
- WmlPageAdapter.cs
- SQLDecimal.cs
- WebPartZone.cs
- SmtpLoginAuthenticationModule.cs
- ObjectViewListener.cs
- ValueUnavailableException.cs
- QilLoop.cs
- PropertyGridEditorPart.cs
- HostingEnvironment.cs
- DocumentViewerAutomationPeer.cs
- ApplicationDirectoryMembershipCondition.cs
- EncryptedKey.cs
- DataGridViewColumn.cs
- ListChangedEventArgs.cs
- XmlLoader.cs
- ComUdtElementCollection.cs
- oledbmetadatacolumnnames.cs
- UriScheme.cs
- SqlNodeAnnotations.cs
- WebBrowserNavigatedEventHandler.cs
- ObjectViewEntityCollectionData.cs
- Int64AnimationBase.cs
- KernelTypeValidation.cs
- Message.cs