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
- Pool.cs
- SafeArrayRankMismatchException.cs
- KeyboardDevice.cs
- ConstraintConverter.cs
- DummyDataSource.cs
- EDesignUtil.cs
- DBCommandBuilder.cs
- IssuanceTokenProviderBase.cs
- ObjectListItem.cs
- HttpCookie.cs
- ServiceParser.cs
- XmlSchemaSubstitutionGroup.cs
- RIPEMD160.cs
- SemanticTag.cs
- HyperLinkColumn.cs
- StaticFileHandler.cs
- UrlMappingCollection.cs
- RuntimeCompatibilityAttribute.cs
- TextElementAutomationPeer.cs
- CopyOfAction.cs
- MultipartContentParser.cs
- CompositeFontInfo.cs
- Block.cs
- TextMarkerSource.cs
- RelatedPropertyManager.cs
- Int32AnimationUsingKeyFrames.cs
- ManipulationCompletedEventArgs.cs
- XmlDataProvider.cs
- CodeCatchClause.cs
- OrthographicCamera.cs
- Models.cs
- HtmlMeta.cs
- ControlBuilderAttribute.cs
- PropertySourceInfo.cs
- PerformanceCountersElement.cs
- PolyQuadraticBezierSegment.cs
- LabelEditEvent.cs
- ProviderConnectionPoint.cs
- ControlParser.cs
- ComplexBindingPropertiesAttribute.cs
- MetabaseServerConfig.cs
- FontFamily.cs
- SpellerHighlightLayer.cs
- OverflowException.cs
- PhotoPrintingIntent.cs
- PathFigure.cs
- DataGridHeaderBorder.cs
- regiisutil.cs
- AttachedAnnotationChangedEventArgs.cs
- ChannelFactoryBase.cs
- SafeRightsManagementHandle.cs
- CodeGenerator.cs
- LazyInitializer.cs
- FigureHelper.cs
- UpdateEventArgs.cs
- ExpressionBuilder.cs
- Receive.cs
- CanonicalFormWriter.cs
- SchemaObjectWriter.cs
- TextViewDesigner.cs
- BulletChrome.cs
- RowUpdatingEventArgs.cs
- GridViewSortEventArgs.cs
- FieldMetadata.cs
- RawAppCommandInputReport.cs
- RubberbandSelector.cs
- DbConnectionPoolGroup.cs
- TemplateControlCodeDomTreeGenerator.cs
- CustomValidator.cs
- CultureInfo.cs
- IOException.cs
- GenericAuthenticationEventArgs.cs
- ExpressionEditor.cs
- SqlDataSourceConfigureFilterForm.cs
- ElementProxy.cs
- BrowserInteropHelper.cs
- cookiecontainer.cs
- AuthorizationSection.cs
- TypographyProperties.cs
- PrintingPermissionAttribute.cs
- PageRouteHandler.cs
- ReadOnlyNameValueCollection.cs
- StaticFileHandler.cs
- Internal.cs
- QilXmlWriter.cs
- DataGridViewRowPrePaintEventArgs.cs
- AppDomainGrammarProxy.cs
- ActiveDocumentEvent.cs
- HybridDictionary.cs
- DataGridViewRow.cs
- UrlAuthFailedErrorFormatter.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- ClientUrlResolverWrapper.cs
- TextTreeTextNode.cs
- Debug.cs
- ISAPIRuntime.cs
- MailDefinition.cs
- Triplet.cs
- ListViewCancelEventArgs.cs
- ControlEvent.cs