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
- XmlSignificantWhitespace.cs
- SchemaHelper.cs
- ThrowHelper.cs
- WebUtil.cs
- XComponentModel.cs
- SizeAnimationUsingKeyFrames.cs
- ErasingStroke.cs
- RuntimeConfig.cs
- TreeView.cs
- Choices.cs
- UmAlQuraCalendar.cs
- SuppressMessageAttribute.cs
- Point3DCollectionValueSerializer.cs
- FlowDocumentReader.cs
- UniqueConstraint.cs
- DbConnectionPool.cs
- Thumb.cs
- ProcessHostServerConfig.cs
- SEHException.cs
- listitem.cs
- ConfigurationSectionCollection.cs
- CircleHotSpot.cs
- ProviderCommandInfoUtils.cs
- ControlParameter.cs
- GridViewPageEventArgs.cs
- CompositeScriptReference.cs
- LayoutEvent.cs
- TreeNodeCollection.cs
- Sequence.cs
- RegexFCD.cs
- listitem.cs
- MD5.cs
- PersonalizablePropertyEntry.cs
- SimpleBitVector32.cs
- TagElement.cs
- DataGridAddNewRow.cs
- ContextBase.cs
- HideDisabledControlAdapter.cs
- ActionItem.cs
- ISAPIWorkerRequest.cs
- Select.cs
- HtmlTable.cs
- UrlMappingsModule.cs
- InfoCardTraceRecord.cs
- SignalGate.cs
- XmlQueryStaticData.cs
- SecureUICommand.cs
- FormsAuthenticationEventArgs.cs
- StyleTypedPropertyAttribute.cs
- MouseOverProperty.cs
- CachedFontFace.cs
- AuthorizationRuleCollection.cs
- Vector3DAnimationBase.cs
- MetadataPropertyCollection.cs
- _ListenerAsyncResult.cs
- BinaryFormatterWriter.cs
- PopupEventArgs.cs
- HandlerWithFactory.cs
- SecurityManager.cs
- EventMappingSettings.cs
- DefaultTextStoreTextComposition.cs
- FrameworkTextComposition.cs
- complextypematerializer.cs
- LayoutDump.cs
- ElementHost.cs
- SizeAnimationClockResource.cs
- ExceptionHandlerDesigner.cs
- ContextMenu.cs
- SizeAnimationClockResource.cs
- DocumentPage.cs
- MetadataPropertyvalue.cs
- CommandEventArgs.cs
- DesignerOptionService.cs
- SpStreamWrapper.cs
- WindowsAuthenticationModule.cs
- SqlClientFactory.cs
- SpellCheck.cs
- NegatedConstant.cs
- SmiEventSink_DeferedProcessing.cs
- AnnouncementService.cs
- FileAuthorizationModule.cs
- ContextProperty.cs
- _HeaderInfoTable.cs
- ResourceCategoryAttribute.cs
- PropertyValueUIItem.cs
- ResourceReferenceExpression.cs
- EpmContentDeSerializer.cs
- HashMembershipCondition.cs
- PresentationTraceSources.cs
- XmlSchemaInclude.cs
- RadioButtonStandardAdapter.cs
- SocketInformation.cs
- Command.cs
- _SpnDictionary.cs
- SmiEventSink_DeferedProcessing.cs
- CaseInsensitiveOrdinalStringComparer.cs
- UnauthorizedWebPart.cs
- ClientApiGenerator.cs
- ContainerFilterService.cs
- ChildrenQuery.cs