Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / Sentence.cs / 1305376 / Sentence.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
namespace System.Data.Common.Utils.Boolean
{
///
/// Abstract base class for nodes in normal form expressions, e.g. Conjunctive Normal Form
/// sentences.
///
/// Type of expression leaf term identifiers.
internal abstract class NormalFormNode
{
private readonly BoolExpr _expr;
///
/// Initialize a new normal form node representing the given expression. Caller must
/// ensure the expression is logically equivalent to the node.
///
/// Expression logically equivalent to this node.
protected NormalFormNode(BoolExpr expr) { _expr = expr.Simplify(); }
///
/// Gets an expression that is logically equivalent to this node.
///
internal BoolExpr Expr { get { return _expr; } }
///
/// Utility method for delegation that return the expression corresponding to a given
/// normal form node.
///
/// Type of node
/// Node to examine.
/// Equivalent Boolean expression for the given node.
protected static BoolExpr ExprSelector(T_NormalFormNode node)
where T_NormalFormNode : NormalFormNode
{
return node._expr;
}
}
///
/// Abstract base class for normal form sentences (CNF and DNF)
///
/// Type of expression leaf term identifiers.
/// Type of clauses in the sentence.
internal abstract class Sentence : NormalFormNode
where T_Clause : Clause, IEquatable
{
private readonly Set _clauses;
///
/// Initialize a sentence given the appropriate sentence clauses. Produces
/// an equivalent expression by composing the clause expressions using
/// the given tree type.
///
/// Sentence clauses
/// Tree type for sentence (and generated expression)
protected Sentence(Set clauses, ExprType treeType)
: base(ConvertClausesToExpr(clauses, treeType))
{
_clauses = clauses.AsReadOnly();
}
// Produces an expression equivalent to the given clauses by composing the clause
// expressions using the given tree type.
private static BoolExpr ConvertClausesToExpr(Set clauses, ExprType treeType)
{
bool isAnd = ExprType.And == treeType;
Debug.Assert(isAnd || ExprType.Or == treeType);
IEnumerable> clauseExpressions =
clauses.Select(new Func>(ExprSelector));
if (isAnd)
{
return new AndExpr(clauseExpressions);
}
else
{
return new OrExpr(clauseExpressions);
}
}
public override string ToString()
{
StringBuilder builder = new StringBuilder();
builder.Append("Sentence{");
builder.Append(_clauses);
return builder.Append("}").ToString();
}
}
///
/// Represents a sentence in disjunctive normal form, e.g.:
///
/// Clause1 + Clause2 . ...
///
/// Where each DNF clause is of the form:
///
/// Literal1 . Literal2 . ...
///
/// Each literal is of the form:
///
/// Term
///
/// or
///
/// !Term
///
/// Type of expression leaf term identifiers.
internal sealed class DnfSentence : Sentence>
{
// Initializes a new DNF sentence given its clauses.
internal DnfSentence(Set> clauses)
: base(clauses, ExprType.Or)
{
}
}
///
/// Represents a sentence in conjunctive normal form, e.g.:
///
/// Clause1 . Clause2 . ...
///
/// Where each DNF clause is of the form:
///
/// Literal1 + Literal2 + ...
///
/// Each literal is of the form:
///
/// Term
///
/// or
///
/// !Term
///
/// Type of expression leaf term identifiers.
internal sealed class CnfSentence : Sentence>
{
// Initializes a new CNF sentence given its clauses.
internal CnfSentence(Set> clauses)
: base(clauses, ExprType.And)
{
}
}
}
// 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
- ExpressionDumper.cs
- CacheDependency.cs
- EditBehavior.cs
- ZipIOBlockManager.cs
- WebBaseEventKeyComparer.cs
- log.cs
- FixedSOMLineRanges.cs
- COM2TypeInfoProcessor.cs
- GridToolTip.cs
- CreateRefExpr.cs
- DropDownButton.cs
- ListControl.cs
- RecommendedAsConfigurableAttribute.cs
- TextBoxRenderer.cs
- StreamWriter.cs
- StylusPointPropertyInfoDefaults.cs
- ToolboxComponentsCreatedEventArgs.cs
- ThaiBuddhistCalendar.cs
- PrtCap_Public.cs
- DBDataPermissionAttribute.cs
- QilFunction.cs
- BroadcastEventHelper.cs
- EntityContainer.cs
- HttpHeaderCollection.cs
- VideoDrawing.cs
- SafeCoTaskMem.cs
- TagMapCollection.cs
- DataGridViewElement.cs
- EmissiveMaterial.cs
- TextEditorTables.cs
- ExceptionHelpers.cs
- PeekCompletedEventArgs.cs
- SessionStateItemCollection.cs
- ConfigurationStrings.cs
- CompositeCollection.cs
- IIS7WorkerRequest.cs
- UnsafeNativeMethods.cs
- Encoding.cs
- DeviceFilterEditorDialog.cs
- FormsAuthenticationTicket.cs
- MD5CryptoServiceProvider.cs
- RealizationDrawingContextWalker.cs
- Mutex.cs
- TriggerBase.cs
- ThemeableAttribute.cs
- ShaderRenderModeValidation.cs
- EventMappingSettingsCollection.cs
- PrivacyNoticeBindingElement.cs
- SQLSingle.cs
- SR.cs
- ObjectPersistData.cs
- TrustManagerMoreInformation.cs
- LinqDataSourceEditData.cs
- RightsManagementEncryptedStream.cs
- UriParserTemplates.cs
- SqlRecordBuffer.cs
- FieldAccessException.cs
- EqualityArray.cs
- SubqueryRules.cs
- GridViewRowCollection.cs
- DictionarySurrogate.cs
- Underline.cs
- Nullable.cs
- AliasedSlot.cs
- WebPartRestoreVerb.cs
- XmlILStorageConverter.cs
- CodeDOMUtility.cs
- ResourceManager.cs
- EnterpriseServicesHelper.cs
- DocumentOrderComparer.cs
- StatusBarPanelClickEvent.cs
- XmlSchemaNotation.cs
- TempFiles.cs
- StructuralObject.cs
- PeerCustomResolverBindingElement.cs
- BoolExpr.cs
- BoundColumn.cs
- PositiveTimeSpanValidator.cs
- StringFormat.cs
- SparseMemoryStream.cs
- PreviewKeyDownEventArgs.cs
- XmlSchemaObjectCollection.cs
- MergeLocalizationDirectives.cs
- ComponentResourceKey.cs
- KeyedCollection.cs
- xml.cs
- SqlDependencyListener.cs
- BitmapEffectInput.cs
- PartManifestEntry.cs
- _ListenerAsyncResult.cs
- MatrixUtil.cs
- SocketInformation.cs
- ContainerUIElement3D.cs
- FlowPanelDesigner.cs
- ApplicationServicesHostFactory.cs
- TracingConnection.cs
- ScrollableControlDesigner.cs
- AudienceUriMode.cs
- OrCondition.cs
- XmlAtomicValue.cs