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
- StrongNameKeyPair.cs
- EventToken.cs
- CalendarDay.cs
- ProfileSettingsCollection.cs
- ContextMenuService.cs
- TextBox.cs
- FileIOPermission.cs
- SoapSchemaMember.cs
- JobStaple.cs
- Size3DValueSerializer.cs
- BufferedGraphicsContext.cs
- COM2IPerPropertyBrowsingHandler.cs
- OracleParameterBinding.cs
- PriorityItem.cs
- Attributes.cs
- DocumentViewerBase.cs
- AggregateNode.cs
- EqualityComparer.cs
- TraceHandlerErrorFormatter.cs
- QueryContinueDragEvent.cs
- Rect.cs
- XmlSerializerAssemblyAttribute.cs
- WindowsFormsHost.cs
- WebSysDisplayNameAttribute.cs
- X509ChainPolicy.cs
- FolderNameEditor.cs
- AddInControllerImpl.cs
- ApplicationDirectoryMembershipCondition.cs
- XsdDateTime.cs
- COM2Properties.cs
- DateTimeValueSerializerContext.cs
- XmlSchemaSimpleType.cs
- BasicKeyConstraint.cs
- DataGridViewSelectedRowCollection.cs
- CodeEventReferenceExpression.cs
- DiscoveryClientReferences.cs
- GridViewCellAutomationPeer.cs
- RenderData.cs
- WrappedIUnknown.cs
- NoneExcludedImageIndexConverter.cs
- WbemException.cs
- DataList.cs
- ApplicationGesture.cs
- DispatcherExceptionEventArgs.cs
- FormViewRow.cs
- BufferedReadStream.cs
- DBSqlParserTable.cs
- LazyInitializer.cs
- RequestCache.cs
- PLINQETWProvider.cs
- EmissiveMaterial.cs
- ModuleBuilderData.cs
- InheritanceAttribute.cs
- QueryAccessibilityHelpEvent.cs
- HttpContext.cs
- dataprotectionpermissionattribute.cs
- ProgressPage.cs
- peersecuritysettings.cs
- DispatcherHooks.cs
- Nullable.cs
- SerializationFieldInfo.cs
- _LoggingObject.cs
- JoinTreeNode.cs
- RubberbandSelector.cs
- ConvertersCollection.cs
- MulticastDelegate.cs
- SerialReceived.cs
- HttpListenerResponse.cs
- ActivityXamlServices.cs
- DataGridItem.cs
- ObjectDataSource.cs
- RelatedPropertyManager.cs
- COM2Properties.cs
- FormClosingEvent.cs
- DNS.cs
- WSSecurityOneDotZeroReceiveSecurityHeader.cs
- NativeCppClassAttribute.cs
- DbParameterHelper.cs
- Utils.cs
- BamlTreeUpdater.cs
- QueueProcessor.cs
- ISFClipboardData.cs
- BinaryObjectReader.cs
- QueryAccessibilityHelpEvent.cs
- JsonWriter.cs
- HtmlLink.cs
- QueryContinueDragEventArgs.cs
- AlignmentYValidation.cs
- UnescapedXmlDiagnosticData.cs
- SamlAssertionKeyIdentifierClause.cs
- PersistenceProviderFactory.cs
- mansign.cs
- DeferredReference.cs
- unsafenativemethodsother.cs
- UIntPtr.cs
- SslStream.cs
- TrustSection.cs
- ViewValidator.cs
- WindowsListViewItem.cs
- CodeGotoStatement.cs