Code:
/ 4.0 / 4.0 / 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(BoolExprexpr) { _expr = expr.Simplify(); } /// /// Gets an expression that is logically equivalent to this node. /// internal BoolExprExpr { 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 BoolExprExprSelector (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(Setclauses, 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. //---------------------------------------------------------------------- // // 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(BoolExprexpr) { _expr = expr.Simplify(); } /// /// Gets an expression that is logically equivalent to this node. /// internal BoolExprExpr { 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 BoolExprExprSelector (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(Setclauses, 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
- ObjectQuery_EntitySqlExtensions.cs
- SmtpNtlmAuthenticationModule.cs
- SizeF.cs
- _NetworkingPerfCounters.cs
- ActionItem.cs
- UpDownBaseDesigner.cs
- SqlDependency.cs
- Material.cs
- ChameleonKey.cs
- NamespaceInfo.cs
- BufferedStream.cs
- AgileSafeNativeMemoryHandle.cs
- SqlClientWrapperSmiStreamChars.cs
- UInt32Converter.cs
- HierarchicalDataTemplate.cs
- ReliableSession.cs
- cookie.cs
- DocumentXPathNavigator.cs
- SqlNode.cs
- DetectEofStream.cs
- SoapWriter.cs
- FormsAuthenticationCredentials.cs
- ShutDownListener.cs
- Rectangle.cs
- NotifyIcon.cs
- TypefaceMap.cs
- BinaryUtilClasses.cs
- DataBindingExpressionBuilder.cs
- DrawingContextDrawingContextWalker.cs
- Message.cs
- ToolStripSeparator.cs
- PartialArray.cs
- ImageCodecInfo.cs
- PngBitmapEncoder.cs
- MarshalByValueComponent.cs
- FactoryId.cs
- SuppressIldasmAttribute.cs
- MouseButtonEventArgs.cs
- Vector3DKeyFrameCollection.cs
- TraceListener.cs
- WebProxyScriptElement.cs
- _UriTypeConverter.cs
- GraphicsContainer.cs
- AppModelKnownContentFactory.cs
- TransformCollection.cs
- TreeNodeCollectionEditor.cs
- PartitionResolver.cs
- EventSetterHandlerConverter.cs
- LinearGradientBrush.cs
- XmlDataLoader.cs
- CookieHandler.cs
- AnnotationService.cs
- SR.cs
- PasswordTextContainer.cs
- RowParagraph.cs
- SplashScreen.cs
- DomainConstraint.cs
- Parsers.cs
- METAHEADER.cs
- COMException.cs
- SharedStatics.cs
- StrokeCollection2.cs
- XmlCharacterData.cs
- SwitchAttribute.cs
- ToolBar.cs
- DeviceContext.cs
- FlowDocumentPage.cs
- FastEncoder.cs
- JournalEntryStack.cs
- MimeWriter.cs
- XmlStringTable.cs
- SafeRightsManagementPubHandle.cs
- ToolStripPanelCell.cs
- FunctionMappingTranslator.cs
- NetworkInformationException.cs
- ReadOnlyTernaryTree.cs
- WithParamAction.cs
- DataGridViewRowCancelEventArgs.cs
- xmlsaver.cs
- StringReader.cs
- Nodes.cs
- RenderingBiasValidation.cs
- ControlCachePolicy.cs
- CSharpCodeProvider.cs
- CodeCompiler.cs
- DocumentApplicationJournalEntry.cs
- SizeChangedInfo.cs
- TextPenaltyModule.cs
- OrderedDictionaryStateHelper.cs
- ConvertEvent.cs
- ControlUtil.cs
- Comparer.cs
- DataBinder.cs
- QilStrConcat.cs
- AssemblyInfo.cs
- AttachedPropertyBrowsableAttribute.cs
- bidPrivateBase.cs
- ColumnCollection.cs
- KeyedHashAlgorithm.cs
- PasswordDeriveBytes.cs