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
- PackageDigitalSignatureManager.cs
- ReferencedAssembly.cs
- TransactionInformation.cs
- ParameterRetriever.cs
- SynchronizedPool.cs
- ScrollProviderWrapper.cs
- SystemException.cs
- RealizedColumnsBlock.cs
- AttributeProviderAttribute.cs
- StringCollection.cs
- UmAlQuraCalendar.cs
- PartialTrustValidationBehavior.cs
- DataKey.cs
- TypeBuilder.cs
- DBCommand.cs
- BamlCollectionHolder.cs
- StoryFragments.cs
- BulletChrome.cs
- InputScopeConverter.cs
- TimeSpanStorage.cs
- NegotiateStream.cs
- MetadataUtilsSmi.cs
- BaseTemplateCodeDomTreeGenerator.cs
- ValueSerializerAttribute.cs
- FormattedTextSymbols.cs
- XmlSchemaGroupRef.cs
- ObjectViewFactory.cs
- ConfigXmlSignificantWhitespace.cs
- TreeViewCancelEvent.cs
- UserInitiatedNavigationPermission.cs
- HttpHeaderCollection.cs
- IRCollection.cs
- ApplyImportsAction.cs
- RelatedView.cs
- UnionCodeGroup.cs
- AspNetSynchronizationContext.cs
- Tablet.cs
- DesignerActionItemCollection.cs
- InputDevice.cs
- GradientBrush.cs
- ButtonBaseAdapter.cs
- ResourceContainer.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- AnimationClockResource.cs
- LocalBuilder.cs
- TextServicesProperty.cs
- DocumentPageTextView.cs
- SendingRequestEventArgs.cs
- DeviceContexts.cs
- TransformCryptoHandle.cs
- HandleCollector.cs
- HtmlLink.cs
- ActivityExecutionFilter.cs
- SchemaEntity.cs
- BitSet.cs
- EdgeProfileValidation.cs
- BaseCollection.cs
- DataKey.cs
- PropertyConverter.cs
- WebException.cs
- PeerNameRegistration.cs
- XmlEncodedRawTextWriter.cs
- SpeechRecognitionEngine.cs
- ReadOnlyDataSourceView.cs
- WindowsUserNameCachingSecurityTokenAuthenticator.cs
- TimelineClockCollection.cs
- LocalIdKeyIdentifierClause.cs
- PageSetupDialog.cs
- ShellProvider.cs
- ReferentialConstraintRoleElement.cs
- TemplateField.cs
- RefreshPropertiesAttribute.cs
- SignatureConfirmationElement.cs
- DataBoundControlHelper.cs
- ArgumentOutOfRangeException.cs
- PathGeometry.cs
- ErrorWebPart.cs
- SByteStorage.cs
- ExtenderHelpers.cs
- WebBrowserProgressChangedEventHandler.cs
- CompositeFontInfo.cs
- WebPartDisplayMode.cs
- InfoCardClaim.cs
- FindCriteria.cs
- LabelEditEvent.cs
- XmlDataSourceNodeDescriptor.cs
- SecurityUtils.cs
- TextBoxAutoCompleteSourceConverter.cs
- EntityDataSourceContextCreatedEventArgs.cs
- TransportManager.cs
- WorkflowViewManager.cs
- SecurityManager.cs
- ManipulationPivot.cs
- DispatchWrapper.cs
- OracleLob.cs
- MinimizableAttributeTypeConverter.cs
- SettingsContext.cs
- SqlFunctionAttribute.cs
- FastPropertyAccessor.cs
- BlockCollection.cs