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
- ParameterModifier.cs
- SHA384Managed.cs
- SelectionRangeConverter.cs
- TextBoxLine.cs
- FuncCompletionCallbackWrapper.cs
- UIElementParagraph.cs
- ScrollViewerAutomationPeer.cs
- PerfCounters.cs
- XmlSchemaType.cs
- AuthenticationConfig.cs
- HideDisabledControlAdapter.cs
- BigIntegerStorage.cs
- ContentTextAutomationPeer.cs
- BaseCodePageEncoding.cs
- HashHelper.cs
- KeyValueSerializer.cs
- FacetChecker.cs
- ServiceManager.cs
- AsymmetricSignatureFormatter.cs
- FixedSOMTableCell.cs
- PartBasedPackageProperties.cs
- FullTextState.cs
- XPathDocumentIterator.cs
- StylusPointCollection.cs
- _IPv4Address.cs
- Compensation.cs
- ListViewDeletedEventArgs.cs
- PropertyTab.cs
- PropertyStore.cs
- SaveFileDialog.cs
- QilScopedVisitor.cs
- ColorKeyFrameCollection.cs
- Menu.cs
- CodeGenerator.cs
- SamlAuthorityBinding.cs
- TextServicesPropertyRanges.cs
- SourceChangedEventArgs.cs
- ReflectionHelper.cs
- CheckBoxRenderer.cs
- DataKey.cs
- PropertyGrid.cs
- ChannelManagerHelpers.cs
- ClientTargetSection.cs
- GatewayDefinition.cs
- ScrollableControl.cs
- GroupByExpressionRewriter.cs
- InheritanceRules.cs
- SequentialActivityDesigner.cs
- StringSorter.cs
- MenuDesigner.cs
- WebScriptMetadataMessageEncoderFactory.cs
- List.cs
- ByteStack.cs
- Point4DValueSerializer.cs
- MessageQueueTransaction.cs
- TextSegment.cs
- ConfigurationLockCollection.cs
- InputDevice.cs
- InstanceCreationEditor.cs
- UnsafeNativeMethods.cs
- CollectionDataContractAttribute.cs
- x509utils.cs
- CustomCredentialPolicy.cs
- activationcontext.cs
- MutexSecurity.cs
- TextChange.cs
- Configuration.cs
- RegexInterpreter.cs
- __TransparentProxy.cs
- CorePropertiesFilter.cs
- Duration.cs
- DataServiceStreamProviderWrapper.cs
- ContextMenuStripActionList.cs
- LinearGradientBrush.cs
- Timer.cs
- DefaultValueTypeConverter.cs
- AudioBase.cs
- TemplateParser.cs
- SimpleTextLine.cs
- HttpCacheVary.cs
- VersionedStream.cs
- CaseCqlBlock.cs
- ClientSettingsProvider.cs
- ComUdtElementCollection.cs
- TabPage.cs
- HashAlgorithm.cs
- NominalTypeEliminator.cs
- PseudoWebRequest.cs
- XmlQueryRuntime.cs
- FunctionDetailsReader.cs
- ParentControlDesigner.cs
- KeyValueConfigurationElement.cs
- DataKeyArray.cs
- ResourceExpression.cs
- AnnotationAdorner.cs
- Effect.cs
- RetrieveVirtualItemEventArgs.cs
- PropagatorResult.cs
- COM2Properties.cs
- ResourceDescriptionAttribute.cs