Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- DurationConverter.cs
- _PooledStream.cs
- ResourcePermissionBase.cs
- HtmlTableRowCollection.cs
- SecurityContext.cs
- DispatcherExceptionFilterEventArgs.cs
- AsymmetricKeyExchangeFormatter.cs
- StylusOverProperty.cs
- SerialPinChanges.cs
- Mapping.cs
- Activator.cs
- WorkflowViewStateService.cs
- Rect.cs
- SchemaCollectionCompiler.cs
- XmlSchemaFacet.cs
- TreeViewAutomationPeer.cs
- DataColumnChangeEvent.cs
- Label.cs
- X509PeerCertificateElement.cs
- HttpModule.cs
- BinaryConverter.cs
- IPEndPoint.cs
- StorageEndPropertyMapping.cs
- PropertySourceInfo.cs
- ValueOfAction.cs
- EntityClassGenerator.cs
- BCryptSafeHandles.cs
- CodeSnippetExpression.cs
- ThousandthOfEmRealDoubles.cs
- ButtonBase.cs
- SignatureToken.cs
- DataGridViewTextBoxEditingControl.cs
- WebScriptMetadataFormatter.cs
- BmpBitmapEncoder.cs
- BitmapCodecInfo.cs
- IconBitmapDecoder.cs
- GcSettings.cs
- ResXResourceWriter.cs
- ISAPIRuntime.cs
- SyndicationSerializer.cs
- ArrangedElement.cs
- CommandHelpers.cs
- FixUpCollection.cs
- InvalidContentTypeException.cs
- UrlAuthorizationModule.cs
- FactoryGenerator.cs
- InfocardInteractiveChannelInitializer.cs
- DiagnosticTrace.cs
- CharUnicodeInfo.cs
- CssTextWriter.cs
- CharStorage.cs
- DataGridViewRowEventArgs.cs
- ParentUndoUnit.cs
- ConnectionStringsSection.cs
- QuestionEventArgs.cs
- Baml2006Reader.cs
- PassportIdentity.cs
- Attributes.cs
- ScanQueryOperator.cs
- DataGridViewCellPaintingEventArgs.cs
- DurableOperationContext.cs
- PanelStyle.cs
- ProfileSection.cs
- CorrelationService.cs
- CodeGeneratorOptions.cs
- NetworkInterface.cs
- StreamedFramingRequestChannel.cs
- XmlElement.cs
- UnionExpr.cs
- LongMinMaxAggregationOperator.cs
- TextBoxRenderer.cs
- MappingModelBuildProvider.cs
- ScrollItemProviderWrapper.cs
- XmlSerializationWriter.cs
- JsonDataContract.cs
- BooleanFacetDescriptionElement.cs
- ObjectResult.cs
- SqlNodeAnnotations.cs
- XmlnsDictionary.cs
- Model3DGroup.cs
- CompilationUtil.cs
- SqlUserDefinedTypeAttribute.cs
- SqlHelper.cs
- DockAndAnchorLayout.cs
- EntryWrittenEventArgs.cs
- PeerNearMe.cs
- TypedColumnHandler.cs
- XpsTokenContext.cs
- RenderingBiasValidation.cs
- ResourceDisplayNameAttribute.cs
- IdentityVerifier.cs
- Padding.cs
- SignatureResourcePool.cs
- StrokeRenderer.cs
- ProgressBarHighlightConverter.cs
- ParserExtension.cs
- SamlAudienceRestrictionCondition.cs
- SerializationHelper.cs
- SocketInformation.cs
- Viewport3DAutomationPeer.cs