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
- EntryWrittenEventArgs.cs
- XmlSerializationWriter.cs
- AppDomainShutdownMonitor.cs
- MatrixCamera.cs
- RangeValidator.cs
- SplashScreenNativeMethods.cs
- Stack.cs
- ObjectDataSourceView.cs
- LassoHelper.cs
- StrokeSerializer.cs
- FontSource.cs
- StorageMappingItemLoader.cs
- ShaperBuffers.cs
- ResourceContainer.cs
- EventSetter.cs
- TablePattern.cs
- BufferedStream.cs
- ComplexTypeEmitter.cs
- PageCopyCount.cs
- DictionaryGlobals.cs
- XmlTextReaderImpl.cs
- XmlNotation.cs
- String.cs
- WebPartCancelEventArgs.cs
- SynchronousChannelMergeEnumerator.cs
- MinimizableAttributeTypeConverter.cs
- PasswordTextContainer.cs
- ImageCodecInfoPrivate.cs
- ColorContextHelper.cs
- WindowsToolbarItemAsMenuItem.cs
- EdmEntityTypeAttribute.cs
- DataMember.cs
- TemplatePartAttribute.cs
- WmlFormAdapter.cs
- NavigationProgressEventArgs.cs
- COM2PropertyDescriptor.cs
- GPStream.cs
- SplitterPanelDesigner.cs
- LabelLiteral.cs
- PathTooLongException.cs
- KeyEvent.cs
- Config.cs
- CardSpacePolicyElement.cs
- NativeMethods.cs
- BamlTreeUpdater.cs
- RemotingException.cs
- LinqDataSourceStatusEventArgs.cs
- RoleGroupCollection.cs
- StandardCommands.cs
- ThreadStateException.cs
- hresults.cs
- UIPropertyMetadata.cs
- XmlUtf8RawTextWriter.cs
- selecteditemcollection.cs
- DataGridTable.cs
- DataBoundControlParameterTarget.cs
- VisualTarget.cs
- RsaSecurityTokenAuthenticator.cs
- MappingMetadataHelper.cs
- ZoneLinkButton.cs
- Privilege.cs
- regiisutil.cs
- RegexMatch.cs
- FlatButtonAppearance.cs
- PointAnimationUsingKeyFrames.cs
- ScrollEventArgs.cs
- DeleteMemberBinder.cs
- MaterialGroup.cs
- TdsEnums.cs
- DoubleUtil.cs
- ServiceOperationParameter.cs
- OledbConnectionStringbuilder.cs
- MyContact.cs
- OpenTypeCommon.cs
- DesignerActionService.cs
- StringValidator.cs
- Win32Native.cs
- Brush.cs
- ToolStripScrollButton.cs
- Normalization.cs
- RoleManagerModule.cs
- PerformanceCounterLib.cs
- CatalogPartCollection.cs
- StorageMappingFragment.cs
- ConfigXmlWhitespace.cs
- EntityProviderFactory.cs
- GridViewColumnCollectionChangedEventArgs.cs
- SelectionProviderWrapper.cs
- ClonableStack.cs
- precedingquery.cs
- MessageQuerySet.cs
- TransformValueSerializer.cs
- QueryOptionExpression.cs
- DataSourceXmlTextReader.cs
- XmlEncodedRawTextWriter.cs
- SoapAttributeAttribute.cs
- DataGridViewLinkColumn.cs
- SafeSecurityHelper.cs
- ReaderWriterLock.cs
- RealProxy.cs