Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / Clause.cs / 1305376 / 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
- TypeConverterHelper.cs
- PackUriHelper.cs
- Rules.cs
- ConnectionProviderAttribute.cs
- D3DImage.cs
- BrushConverter.cs
- ScriptDescriptor.cs
- AncestorChangedEventArgs.cs
- NameValueFileSectionHandler.cs
- Facet.cs
- SplashScreen.cs
- NullReferenceException.cs
- ForeignKeyConstraint.cs
- TextBounds.cs
- ExtensionWindow.cs
- RowCache.cs
- OwnerDrawPropertyBag.cs
- followingsibling.cs
- ClientTargetSection.cs
- OutputScopeManager.cs
- httpserverutility.cs
- CharStorage.cs
- Validator.cs
- SqlFlattener.cs
- BinaryParser.cs
- Transform3D.cs
- querybuilder.cs
- InfoCardKeyedHashAlgorithm.cs
- CfgParser.cs
- OdbcStatementHandle.cs
- HeaderCollection.cs
- HttpHeaderCollection.cs
- RectangleHotSpot.cs
- RuleValidation.cs
- StrongNameKeyPair.cs
- Style.cs
- activationcontext.cs
- _LocalDataStoreMgr.cs
- SecurityHeader.cs
- Parameter.cs
- TypefaceCollection.cs
- Transform.cs
- SapiGrammar.cs
- ReferenceConverter.cs
- TypeValidationEventArgs.cs
- Soap12ServerProtocol.cs
- QueryParameter.cs
- WorkflowServiceNamespace.cs
- DataGridPreparingCellForEditEventArgs.cs
- TextRangeEditTables.cs
- ProjectedSlot.cs
- GeometryGroup.cs
- TrackingConditionCollection.cs
- OdbcException.cs
- PackagePart.cs
- JoinQueryOperator.cs
- GeneralTransform3DTo2D.cs
- Vector3DAnimation.cs
- ClientConvert.cs
- RoleManagerEventArgs.cs
- EditBehavior.cs
- RenderContext.cs
- StringInfo.cs
- ScrollProviderWrapper.cs
- Socket.cs
- ThreadPoolTaskScheduler.cs
- EncodingStreamWrapper.cs
- XNameConverter.cs
- SqlConnectionPoolProviderInfo.cs
- MobileUserControl.cs
- ManagementObjectSearcher.cs
- ConnectorSelectionGlyph.cs
- CalendarDataBindingHandler.cs
- StrongNameMembershipCondition.cs
- OdbcEnvironment.cs
- WhitespaceReader.cs
- StringFreezingAttribute.cs
- ReadOnlyHierarchicalDataSourceView.cs
- TreeView.cs
- FormView.cs
- TrailingSpaceComparer.cs
- DocumentCollection.cs
- WaitHandle.cs
- BypassElement.cs
- ContourSegment.cs
- ParameterModifier.cs
- SqlReferenceCollection.cs
- CodeMemberField.cs
- EntityClassGenerator.cs
- TemplateApplicationHelper.cs
- BCryptNative.cs
- URL.cs
- Queue.cs
- ClassGenerator.cs
- SchemaManager.cs
- ResolvedKeyFrameEntry.cs
- RC2CryptoServiceProvider.cs
- TrustManagerMoreInformation.cs
- ArraySet.cs
- ASCIIEncoding.cs