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
- TagNameToTypeMapper.cs
- DefaultSerializationProviderAttribute.cs
- MeasureData.cs
- StringFunctions.cs
- XmlQuerySequence.cs
- RuntimeVariablesExpression.cs
- DataGridColumnsPage.cs
- AffineTransform3D.cs
- DefaultTextStoreTextComposition.cs
- ListBoxItemAutomationPeer.cs
- httpstaticobjectscollection.cs
- WriteTimeStream.cs
- ByteKeyFrameCollection.cs
- ElementHostAutomationPeer.cs
- ProfessionalColors.cs
- ProfileParameter.cs
- SynchronizationHandlesCodeDomSerializer.cs
- RecordsAffectedEventArgs.cs
- NotificationContext.cs
- StyleSheetDesigner.cs
- AssociationType.cs
- TypeConverterMarkupExtension.cs
- CircleHotSpot.cs
- PagesSection.cs
- MatchSingleFxEngineOpcode.cs
- WebPartEditorCancelVerb.cs
- DataGridViewMethods.cs
- FormsAuthenticationConfiguration.cs
- GlyphShapingProperties.cs
- DropSource.cs
- Rect3D.cs
- SqlMethodCallConverter.cs
- ContextMarshalException.cs
- ForceCopyBuildProvider.cs
- XhtmlTextWriter.cs
- RowVisual.cs
- PageDeviceFont.cs
- VectorValueSerializer.cs
- Setter.cs
- DataRowChangeEvent.cs
- ByteAnimationUsingKeyFrames.cs
- TypeResolver.cs
- AsymmetricSecurityProtocolFactory.cs
- XmlStreamStore.cs
- ContractHandle.cs
- SpellCheck.cs
- DataGridViewButtonCell.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- BitmapPalettes.cs
- SimpleHandlerFactory.cs
- QuaternionAnimation.cs
- HeaderElement.cs
- ScalarType.cs
- EntityDataReader.cs
- ScriptingWebServicesSectionGroup.cs
- HttpContextServiceHost.cs
- ProjectionPath.cs
- PrePostDescendentsWalker.cs
- NetworkInformationPermission.cs
- ReaderOutput.cs
- DataStorage.cs
- XamlToRtfWriter.cs
- ExpressionBuilderContext.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- RequestSecurityTokenResponse.cs
- DocumentAutomationPeer.cs
- BindingRestrictions.cs
- FindResponse.cs
- CollectionBase.cs
- WindowsPrincipal.cs
- ExceptionUtil.cs
- ExpandableObjectConverter.cs
- FileEnumerator.cs
- AdRotator.cs
- AppDomainManager.cs
- RoutedEventHandlerInfo.cs
- InputDevice.cs
- EditBehavior.cs
- FormsAuthenticationCredentials.cs
- TextEffect.cs
- FieldMetadata.cs
- WebResourceUtil.cs
- UmAlQuraCalendar.cs
- PathGeometry.cs
- MemberMemberBinding.cs
- NullToBooleanConverter.cs
- IPeerNeighbor.cs
- BinaryReader.cs
- HandleTable.cs
- TileBrush.cs
- TimeStampChecker.cs
- CustomWebEventKey.cs
- InplaceBitmapMetadataWriter.cs
- RichTextBoxDesigner.cs
- SrgsRule.cs
- XmlBinaryReaderSession.cs
- HttpModuleActionCollection.cs
- ToolStripItemImageRenderEventArgs.cs
- ContainerUIElement3D.cs
- ResourcePermissionBaseEntry.cs