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
- FileChangeNotifier.cs
- sqlnorm.cs
- ValueUtilsSmi.cs
- FormViewDeletedEventArgs.cs
- KeyGestureValueSerializer.cs
- CodeAccessSecurityEngine.cs
- XPathScanner.cs
- Membership.cs
- StreamingContext.cs
- SqlComparer.cs
- StatusBarDrawItemEvent.cs
- DefaultPropertyAttribute.cs
- StateChangeEvent.cs
- KnownTypes.cs
- ItemCheckEvent.cs
- MSAAEventDispatcher.cs
- IdentityHolder.cs
- FocusWithinProperty.cs
- EntryPointNotFoundException.cs
- RequiredFieldValidator.cs
- WindowsTokenRoleProvider.cs
- FacetValueContainer.cs
- TreeNodeBindingCollection.cs
- TrackingExtract.cs
- TextOptions.cs
- SqlTrackingWorkflowInstance.cs
- Version.cs
- SynthesizerStateChangedEventArgs.cs
- AdapterDictionary.cs
- CatalogPartChrome.cs
- BamlRecordWriter.cs
- AndCondition.cs
- DefaultPrintController.cs
- RepeatBehavior.cs
- PropertyChange.cs
- ArraySubsetEnumerator.cs
- StringBuilder.cs
- FormViewDeletedEventArgs.cs
- DataDesignUtil.cs
- AudioFormatConverter.cs
- SerializerWriterEventHandlers.cs
- EncodingTable.cs
- TextRangeEdit.cs
- PageVisual.cs
- TextParagraph.cs
- GraphicsPathIterator.cs
- XamlVector3DCollectionSerializer.cs
- CompilerParameters.cs
- SiteMap.cs
- ManifestResourceInfo.cs
- PackageRelationshipCollection.cs
- DataGridViewCellMouseEventArgs.cs
- NativeMethods.cs
- SecurityContextSecurityTokenAuthenticator.cs
- TraceHandler.cs
- ConfigViewGenerator.cs
- TimeoutTimer.cs
- InputMethodStateTypeInfo.cs
- PageContent.cs
- webproxy.cs
- SortAction.cs
- KeyedHashAlgorithm.cs
- FlowLayoutSettings.cs
- WpfPayload.cs
- Geometry3D.cs
- sqlpipe.cs
- ReferenceEqualityComparer.cs
- AuthenticationException.cs
- XmlSchemaInfo.cs
- DiffuseMaterial.cs
- HtmlHead.cs
- ExtensionFile.cs
- TaiwanCalendar.cs
- OSFeature.cs
- SpecularMaterial.cs
- SrgsElementFactoryCompiler.cs
- XmlSchemaSimpleContent.cs
- AppDomainAttributes.cs
- SHA1CryptoServiceProvider.cs
- DataGridViewCellMouseEventArgs.cs
- Polyline.cs
- DynamicVirtualDiscoSearcher.cs
- RawStylusSystemGestureInputReport.cs
- WebServicesInteroperability.cs
- MimeTypeAttribute.cs
- NoneExcludedImageIndexConverter.cs
- BorderSidesEditor.cs
- WindowsSecurityToken.cs
- TextEditorTyping.cs
- SqlTransaction.cs
- SourceFileBuildProvider.cs
- FtpWebRequest.cs
- CodeCatchClause.cs
- DocumentationServerProtocol.cs
- PresentationSource.cs
- TextPointer.cs
- BatchWriter.cs
- PreProcessor.cs
- DataGridViewLinkColumn.cs
- SqlEnums.cs