Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / Clause.cs / 2 / Clause.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 { ////// Base class for clauses, which are (constrained) combinations of literals. /// ///Type of normal form literal. internal abstract class Clause: NormalFormNode { private readonly Set > _literals; private readonly int _hashCode; /// /// Initialize a new clause. /// /// Literals contained in the clause. /// Type of expression tree to produce from literals. protected Clause(Set> literals, ExprType treeType) : base(ConvertLiteralsToExpr(literals, treeType)) { _literals = literals.AsReadOnly(); _hashCode = _literals.GetElementsHashCode(); } /// /// Gets the literals contained in this clause. /// internal Set> Literals { get { return _literals; } } // Given a collection of literals and a tree type, returns an expression of the given type. private static BoolExpr ConvertLiteralsToExpr(Set > literals, ExprType treeType) { bool isAnd = ExprType.And == treeType; Debug.Assert(isAnd || ExprType.Or == treeType); IEnumerable > literalExpressions = literals.Select( new Func , BoolExpr >(ConvertLiteralToExpression)); if (isAnd) { return new AndExpr (literalExpressions); } else { return new OrExpr (literalExpressions); } } // Given a literal, returns its logical equivalent expression. private static BoolExpr ConvertLiteralToExpression(Literal literal) { return literal.Expr; } public override string ToString() { StringBuilder builder = new StringBuilder(); builder.Append("Clause{"); builder.Append(_literals); return builder.Append("}").ToString(); } public override int GetHashCode() { return _hashCode; } public override bool Equals(object obj) { Debug.Fail("call typed Equals"); return base.Equals(obj); } } /// /// A DNF clause is of the form: /// /// Literal1 . Literal2 . ... /// /// Each literal is of the form: /// /// Term /// /// or /// /// !Term /// ///Type of normal form literal. internal sealed class DnfClause: Clause , IEquatable > { /// /// Initialize a DNF clause. /// /// Literals in clause. internal DnfClause(Set> literals) : base(literals, ExprType.And) { } public bool Equals(DnfClause other) { return null != other && other.Literals.SetEquals(Literals); } } /// /// A CNF clause is of the form: /// /// Literal1 + Literal2 . ... /// /// Each literal is of the form: /// /// Term /// /// or /// /// !Term /// ///Type of normal form literal. internal sealed class CnfClause: Clause , IEquatable > { /// /// Initialize a CNF clause. /// /// Literals in clause. internal CnfClause(Set> literals) : base(literals, ExprType.Or) { } public bool Equals(CnfClause other) { return null != other && other.Literals.SetEquals(Literals); } } } // 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 { ////// Base class for clauses, which are (constrained) combinations of literals. /// ///Type of normal form literal. internal abstract class Clause: NormalFormNode { private readonly Set > _literals; private readonly int _hashCode; /// /// Initialize a new clause. /// /// Literals contained in the clause. /// Type of expression tree to produce from literals. protected Clause(Set> literals, ExprType treeType) : base(ConvertLiteralsToExpr(literals, treeType)) { _literals = literals.AsReadOnly(); _hashCode = _literals.GetElementsHashCode(); } /// /// Gets the literals contained in this clause. /// internal Set> Literals { get { return _literals; } } // Given a collection of literals and a tree type, returns an expression of the given type. private static BoolExpr ConvertLiteralsToExpr(Set > literals, ExprType treeType) { bool isAnd = ExprType.And == treeType; Debug.Assert(isAnd || ExprType.Or == treeType); IEnumerable > literalExpressions = literals.Select( new Func , BoolExpr >(ConvertLiteralToExpression)); if (isAnd) { return new AndExpr (literalExpressions); } else { return new OrExpr (literalExpressions); } } // Given a literal, returns its logical equivalent expression. private static BoolExpr ConvertLiteralToExpression(Literal literal) { return literal.Expr; } public override string ToString() { StringBuilder builder = new StringBuilder(); builder.Append("Clause{"); builder.Append(_literals); return builder.Append("}").ToString(); } public override int GetHashCode() { return _hashCode; } public override bool Equals(object obj) { Debug.Fail("call typed Equals"); return base.Equals(obj); } } /// /// A DNF clause is of the form: /// /// Literal1 . Literal2 . ... /// /// Each literal is of the form: /// /// Term /// /// or /// /// !Term /// ///Type of normal form literal. internal sealed class DnfClause: Clause , IEquatable > { /// /// Initialize a DNF clause. /// /// Literals in clause. internal DnfClause(Set> literals) : base(literals, ExprType.And) { } public bool Equals(DnfClause other) { return null != other && other.Literals.SetEquals(Literals); } } /// /// A CNF clause is of the form: /// /// Literal1 + Literal2 . ... /// /// Each literal is of the form: /// /// Term /// /// or /// /// !Term /// ///Type of normal form literal. internal sealed class CnfClause: Clause , IEquatable > { /// /// Initialize a CNF clause. /// /// Literals in clause. internal CnfClause(Set> literals) : base(literals, ExprType.Or) { } public bool Equals(CnfClause other) { return null != other && other.Literals.SetEquals(Literals); } } } // 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
- CompilationSection.cs
- DataRowExtensions.cs
- BinaryFormatterWriter.cs
- ToggleProviderWrapper.cs
- DbProviderFactories.cs
- ImageListStreamer.cs
- AnnotationComponentChooser.cs
- EntryIndex.cs
- LocalizabilityAttribute.cs
- SwitchLevelAttribute.cs
- Viewport3DVisual.cs
- SqlInfoMessageEvent.cs
- InitializationEventAttribute.cs
- CachedFontFamily.cs
- GenericsInstances.cs
- HyperLinkStyle.cs
- CodeBlockBuilder.cs
- UInt32Converter.cs
- UnsafePeerToPeerMethods.cs
- BaseParser.cs
- OperationAbortedException.cs
- CodeCommentStatement.cs
- httpapplicationstate.cs
- ArglessEventHandlerProxy.cs
- InkCanvasAutomationPeer.cs
- HtmlLink.cs
- WorkflowWebService.cs
- SmiTypedGetterSetter.cs
- ParagraphVisual.cs
- GeneralTransformGroup.cs
- Mappings.cs
- Random.cs
- WebPartConnectionCollection.cs
- FileNameEditor.cs
- IERequestCache.cs
- DataChangedEventManager.cs
- PasswordRecovery.cs
- SemaphoreSlim.cs
- QueryOutputWriter.cs
- WindowsHyperlink.cs
- WebPartChrome.cs
- PropertyRef.cs
- XmlDocumentFragment.cs
- ImageMap.cs
- FontStretches.cs
- HtmlTableRow.cs
- SyndicationDeserializer.cs
- Debug.cs
- RuleElement.cs
- VolatileEnlistmentMultiplexing.cs
- HostedHttpTransportManager.cs
- Int16.cs
- X509IssuerSerialKeyIdentifierClause.cs
- PackWebResponse.cs
- CheckoutException.cs
- VisualTreeHelper.cs
- EventMap.cs
- ObjectDataSourceChooseTypePanel.cs
- ModifierKeysValueSerializer.cs
- SendMailErrorEventArgs.cs
- KeyedQueue.cs
- SocketAddress.cs
- TemplateKeyConverter.cs
- RegexCharClass.cs
- HtmlInputControl.cs
- LogLogRecord.cs
- RTLAwareMessageBox.cs
- CalendarDay.cs
- DesignerForm.cs
- DesignerCategoryAttribute.cs
- ResXResourceWriter.cs
- Subtree.cs
- SupportsEventValidationAttribute.cs
- Control.cs
- FileReader.cs
- WorkflowServiceBehavior.cs
- VirtualDirectoryMappingCollection.cs
- Inflater.cs
- ToolStripGrip.cs
- FilterUserControlBase.cs
- BulletedListEventArgs.cs
- ThousandthOfEmRealDoubles.cs
- HostingEnvironmentSection.cs
- AnnotationAuthorChangedEventArgs.cs
- Bits.cs
- DataFormats.cs
- Int32RectConverter.cs
- SizeAnimationUsingKeyFrames.cs
- CuspData.cs
- CatalogPartCollection.cs
- EventLogEntryCollection.cs
- _FixedSizeReader.cs
- ImageUrlEditor.cs
- FlowDocumentFormatter.cs
- DataGridRow.cs
- localization.cs
- JulianCalendar.cs
- LeaseManager.cs
- XhtmlBasicPanelAdapter.cs
- DataGridTextBox.cs