Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / Clause.cs / 1305376 / 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
- DebugView.cs
- TreeIterator.cs
- MimeFormReflector.cs
- SettingsPropertyNotFoundException.cs
- TextBoxBase.cs
- TransferMode.cs
- ListControlConvertEventArgs.cs
- TableItemProviderWrapper.cs
- DateRangeEvent.cs
- ModuleBuilder.cs
- MenuItemCollection.cs
- DeploymentSection.cs
- SizeAnimationBase.cs
- NavigationProperty.cs
- CustomAttributeBuilder.cs
- ListSortDescription.cs
- RequestCacheEntry.cs
- SizeChangedInfo.cs
- ObjectListShowCommandsEventArgs.cs
- LambdaCompiler.Binary.cs
- SafeNativeMethods.cs
- SqlNode.cs
- ScriptingRoleServiceSection.cs
- XmlSchemaSearchPattern.cs
- BuiltInExpr.cs
- MULTI_QI.cs
- CodeMemberEvent.cs
- Selector.cs
- FileEnumerator.cs
- CodeIdentifier.cs
- WindowsRebar.cs
- ImageFormat.cs
- XPathNodePointer.cs
- COM2EnumConverter.cs
- SqlServices.cs
- precedingsibling.cs
- TextContainer.cs
- InstancePersistenceException.cs
- Preprocessor.cs
- PropertyEntry.cs
- ScriptManager.cs
- ZipPackagePart.cs
- InvocationExpression.cs
- Span.cs
- URLAttribute.cs
- ParallelTimeline.cs
- ContainerControl.cs
- HtmlValidationSummaryAdapter.cs
- RowsCopiedEventArgs.cs
- SynchronizedDispatch.cs
- TextEffect.cs
- XmlNode.cs
- DesignOnlyAttribute.cs
- PerformanceCounter.cs
- CatalogPartDesigner.cs
- ExpressionBuilder.cs
- Triangle.cs
- UnsafeNativeMethods.cs
- DeploymentSectionCache.cs
- TextEffect.cs
- SmiEventSink_Default.cs
- SafeRegistryHandle.cs
- Span.cs
- VisualTarget.cs
- XmlSchemaSimpleTypeRestriction.cs
- UnknownExceptionActionHelper.cs
- StringCollection.cs
- TypeConstant.cs
- COM2FontConverter.cs
- AggregateNode.cs
- SynchronizedDispatch.cs
- FixedSOMPageConstructor.cs
- BindingValueChangedEventArgs.cs
- EmbossBitmapEffect.cs
- RC2.cs
- RuleSettings.cs
- HwndProxyElementProvider.cs
- CookieProtection.cs
- FamilyMapCollection.cs
- CheckBoxAutomationPeer.cs
- ImageBrush.cs
- GeneralTransformGroup.cs
- FtpWebRequest.cs
- TeredoHelper.cs
- _AutoWebProxyScriptHelper.cs
- IBuiltInEvidence.cs
- ScrollBar.cs
- HtmlTableCell.cs
- Int32CAMarshaler.cs
- BigInt.cs
- xdrvalidator.cs
- TextTreeUndo.cs
- smtppermission.cs
- StandardToolWindows.cs
- DataGridCellItemAutomationPeer.cs
- FunctionCommandText.cs
- safex509handles.cs
- UIElementHelper.cs
- FigureHelper.cs
- PageRanges.cs