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
- CodeTypeDeclarationCollection.cs
- SearchForVirtualItemEventArgs.cs
- DataGridViewColumnCollectionDialog.cs
- RadioButtonStandardAdapter.cs
- AllowedAudienceUriElementCollection.cs
- ImageFormat.cs
- __Filters.cs
- RootBrowserWindowProxy.cs
- CodeDelegateInvokeExpression.cs
- XPathNode.cs
- ListDictionary.cs
- DataGridPageChangedEventArgs.cs
- Delegate.cs
- MimeParameters.cs
- LinkButton.cs
- shaper.cs
- EndpointAddress10.cs
- SmtpSection.cs
- LabelDesigner.cs
- WriteFileContext.cs
- CallbackWrapper.cs
- DBSchemaRow.cs
- ToolboxService.cs
- SqlWorkflowInstanceStoreLock.cs
- ManualResetEventSlim.cs
- StorageTypeMapping.cs
- WebServiceHandler.cs
- ExponentialEase.cs
- StorageFunctionMapping.cs
- CommonObjectSecurity.cs
- ShapeTypeface.cs
- CodePageUtils.cs
- VBCodeProvider.cs
- GridViewSelectEventArgs.cs
- UntypedNullExpression.cs
- HorizontalAlignConverter.cs
- RuleInfoComparer.cs
- AttachInfo.cs
- WebPartsSection.cs
- EnumUnknown.cs
- TextBox.cs
- EmptyQuery.cs
- Scene3D.cs
- ThreadNeutralSemaphore.cs
- DropSource.cs
- MissingSatelliteAssemblyException.cs
- Expression.cs
- TraceEventCache.cs
- ListMarkerSourceInfo.cs
- OracleNumber.cs
- PartitionedStream.cs
- SymbolMethod.cs
- SHA256Managed.cs
- StringSorter.cs
- TextElement.cs
- StaticDataManager.cs
- DispatchOperationRuntime.cs
- EventHandlerList.cs
- ClockController.cs
- ExpressionConverter.cs
- StandardToolWindows.cs
- DataTableNewRowEvent.cs
- WebPartEditVerb.cs
- PageCatalogPart.cs
- TemplatePagerField.cs
- LocalizationParserHooks.cs
- TableRow.cs
- AsymmetricSignatureFormatter.cs
- Menu.cs
- JsonQNameDataContract.cs
- JournalEntryStack.cs
- TypeBuilder.cs
- OpCellTreeNode.cs
- TextTreeObjectNode.cs
- BitVector32.cs
- ConditionalBranch.cs
- MultiSelectRootGridEntry.cs
- httpserverutility.cs
- BaseTreeIterator.cs
- TextEditorContextMenu.cs
- SymmetricKeyWrap.cs
- DataGridTableCollection.cs
- XmlSerializerNamespaces.cs
- SinglePageViewer.cs
- IDQuery.cs
- DelegatingConfigHost.cs
- ResXBuildProvider.cs
- Win32.cs
- TrackBar.cs
- DependencyPropertyConverter.cs
- ListViewGroup.cs
- DataGridLinkButton.cs
- UpDownEvent.cs
- ColumnCollection.cs
- webproxy.cs
- ComponentManagerBroker.cs
- ImageMapEventArgs.cs
- CalloutQueueItem.cs
- TextShapeableCharacters.cs
- PointKeyFrameCollection.cs