Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / Clause.cs / 1 / 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
- ToolboxBitmapAttribute.cs
- DataGridViewCellStyleConverter.cs
- ObjectListCommandCollection.cs
- PointConverter.cs
- ConnectionOrientedTransportElement.cs
- CssTextWriter.cs
- Util.cs
- EnumMember.cs
- SchemaImporterExtensionElement.cs
- ObjectQuery.cs
- NativeMethods.cs
- ReverseInheritProperty.cs
- TrackingWorkflowEventArgs.cs
- PackagePartCollection.cs
- LineGeometry.cs
- OleDbCommandBuilder.cs
- CategoryNameCollection.cs
- PackageFilter.cs
- TextElementAutomationPeer.cs
- PenContexts.cs
- WindowsFormsHostAutomationPeer.cs
- DesignColumnCollection.cs
- X509WindowsSecurityToken.cs
- Random.cs
- HtmlInputPassword.cs
- DSASignatureDeformatter.cs
- DesignerDeviceConfig.cs
- PersonalizableTypeEntry.cs
- DataBindingExpressionBuilder.cs
- StandardCommands.cs
- RowUpdatingEventArgs.cs
- CommonGetThemePartSize.cs
- Encoding.cs
- WebBrowser.cs
- EventHandlers.cs
- StrongNameUtility.cs
- WebAdminConfigurationHelper.cs
- GenericParameterDataContract.cs
- WinEventHandler.cs
- JavaScriptString.cs
- UInt32Converter.cs
- DefaultEventAttribute.cs
- MediaCommands.cs
- AuthenticationException.cs
- PixelFormatConverter.cs
- UrlPath.cs
- TextParagraph.cs
- ApplyTemplatesAction.cs
- SocketInformation.cs
- ConsumerConnectionPoint.cs
- PolygonHotSpot.cs
- DataSpaceManager.cs
- MetadataArtifactLoaderCompositeFile.cs
- StringReader.cs
- BitmapPalette.cs
- RepeatButtonAutomationPeer.cs
- CompensableActivity.cs
- ManualWorkflowSchedulerService.cs
- FreezableDefaultValueFactory.cs
- ReferenceConverter.cs
- CodeSubDirectoriesCollection.cs
- XamlStyleSerializer.cs
- TileModeValidation.cs
- FlowDocumentPage.cs
- Timer.cs
- RightsManagementEncryptionTransform.cs
- ResourceProviderFactory.cs
- SessionIDManager.cs
- AppDomainUnloadedException.cs
- SignatureTargetIdManager.cs
- CallSite.cs
- CallContext.cs
- StateManagedCollection.cs
- AllMembershipCondition.cs
- GridItem.cs
- TextServicesCompartmentContext.cs
- ValidatingReaderNodeData.cs
- SelectionList.cs
- TransferRequestHandler.cs
- InheritanceAttribute.cs
- StructuralObject.cs
- EnumValAlphaComparer.cs
- SqlPersistenceWorkflowInstanceDescription.cs
- printdlgexmarshaler.cs
- OutputCacheModule.cs
- BinaryConverter.cs
- ConfigurationLocation.cs
- OutOfProcStateClientManager.cs
- MouseBinding.cs
- ToolStripItemTextRenderEventArgs.cs
- PeerEndPoint.cs
- RowTypeElement.cs
- InkCanvasInnerCanvas.cs
- CellParaClient.cs
- WebBrowser.cs
- MeasureItemEvent.cs
- CheckBox.cs
- ProvideValueServiceProvider.cs
- BamlResourceContent.cs
- Pair.cs