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
- PathParser.cs
- ImageAnimator.cs
- ContentElement.cs
- InputGestureCollection.cs
- ValidationError.cs
- ToolStripRenderEventArgs.cs
- RemotingConfiguration.cs
- PerformanceCountersElement.cs
- SerializerWriterEventHandlers.cs
- MailMessageEventArgs.cs
- ErrorsHelper.cs
- CodeExpressionCollection.cs
- HtmlProps.cs
- ZoneLinkButton.cs
- SqlUdtInfo.cs
- Exceptions.cs
- FormView.cs
- GeneratedCodeAttribute.cs
- DelegateBodyWriter.cs
- SystemColors.cs
- StaticExtension.cs
- SqlParameterizer.cs
- DebugHandleTracker.cs
- DefaultParameterValueAttribute.cs
- SoapAttributeOverrides.cs
- GenericsInstances.cs
- SystemDropShadowChrome.cs
- COM2AboutBoxPropertyDescriptor.cs
- AsyncOperationContext.cs
- ParseChildrenAsPropertiesAttribute.cs
- ToolStripSystemRenderer.cs
- ChildTable.cs
- Perspective.cs
- TokenBasedSetEnumerator.cs
- InstanceDescriptor.cs
- HtmlTable.cs
- TemplatePartAttribute.cs
- StringWriter.cs
- SizeValueSerializer.cs
- Decorator.cs
- ImageSource.cs
- GetUserPreferenceRequest.cs
- DelayedRegex.cs
- BaseCAMarshaler.cs
- ConfigurationValidatorAttribute.cs
- XmlAnyElementAttribute.cs
- SmtpNetworkElement.cs
- hresults.cs
- SystemIPAddressInformation.cs
- CodeSubDirectoriesCollection.cs
- ProxyWebPartManagerDesigner.cs
- MessageDispatch.cs
- EditBehavior.cs
- NetWebProxyFinder.cs
- IOThreadTimer.cs
- ChildrenQuery.cs
- CommandHelpers.cs
- SrgsElement.cs
- ButtonBase.cs
- CodeParameterDeclarationExpression.cs
- ObjectNavigationPropertyMapping.cs
- DBCSCodePageEncoding.cs
- WorkflowApplicationCompletedEventArgs.cs
- ExpressionCopier.cs
- ReadOnlyObservableCollection.cs
- ObjectContextServiceProvider.cs
- TimeZone.cs
- PersonalizationProviderCollection.cs
- BamlWriter.cs
- ResourceReferenceKeyNotFoundException.cs
- GridLengthConverter.cs
- DateTimeParse.cs
- GifBitmapDecoder.cs
- XsltCompileContext.cs
- FilteredDataSetHelper.cs
- TextParagraphCache.cs
- FrameworkTemplate.cs
- BaseDataList.cs
- StreamedFramingRequestChannel.cs
- Highlights.cs
- WindowsListViewItem.cs
- DataRowExtensions.cs
- PointF.cs
- FamilyTypeface.cs
- MenuDesigner.cs
- PermissionSet.cs
- MatrixAnimationUsingPath.cs
- ReadWriteObjectLock.cs
- ColorAnimationBase.cs
- CngUIPolicy.cs
- SecurityException.cs
- FontInfo.cs
- ApplicationSecurityManager.cs
- DSASignatureFormatter.cs
- AsyncDataRequest.cs
- DrawingVisualDrawingContext.cs
- ConfigXmlComment.cs
- ComponentDispatcherThread.cs
- UInt64Converter.cs
- Win32NamedPipes.cs