Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / Clause.cs / 2 / 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
- HtmlContainerControl.cs
- FrameworkElementFactory.cs
- SourceFilter.cs
- ToolStripProgressBar.cs
- MenuItemAutomationPeer.cs
- DbProviderServices.cs
- ControlBuilder.cs
- MenuCommand.cs
- Privilege.cs
- CursorConverter.cs
- TreeIterators.cs
- SspiNegotiationTokenProvider.cs
- MD5CryptoServiceProvider.cs
- TraceSwitch.cs
- Model3DGroup.cs
- DataFormats.cs
- EqualityComparer.cs
- CodeDomComponentSerializationService.cs
- _ProxyRegBlob.cs
- PeerCollaborationPermission.cs
- DefaultValueAttribute.cs
- querybuilder.cs
- ConfigXmlSignificantWhitespace.cs
- CodeThrowExceptionStatement.cs
- TextRangeProviderWrapper.cs
- cryptoapiTransform.cs
- DependencyObjectPropertyDescriptor.cs
- HttpModuleAction.cs
- InfiniteTimeSpanConverter.cs
- MainMenu.cs
- ElementProxy.cs
- DataGridViewTextBoxCell.cs
- Floater.cs
- DataGridSortingEventArgs.cs
- RC2CryptoServiceProvider.cs
- AssertSection.cs
- HasCopySemanticsAttribute.cs
- EastAsianLunisolarCalendar.cs
- CatalogPartChrome.cs
- GridItemCollection.cs
- TypeValidationEventArgs.cs
- ShapingWorkspace.cs
- validationstate.cs
- RtfFormatStack.cs
- AuthenticationModulesSection.cs
- AsmxEndpointPickerExtension.cs
- DesignColumn.cs
- SelectionListComponentEditor.cs
- HandlerFactoryCache.cs
- ImmutableAssemblyCacheEntry.cs
- GACIdentityPermission.cs
- AnnotationMap.cs
- RouteCollection.cs
- RoleServiceManager.cs
- storepermission.cs
- ClientOperationFormatterProvider.cs
- XmlReaderSettings.cs
- ByteFacetDescriptionElement.cs
- Source.cs
- UTF7Encoding.cs
- CommentAction.cs
- CodeTypeParameterCollection.cs
- ThrowHelper.cs
- SoapAttributeAttribute.cs
- FilterFactory.cs
- NumberFunctions.cs
- ExponentialEase.cs
- BitmapPalette.cs
- StdValidatorsAndConverters.cs
- RepeatBehaviorConverter.cs
- RowsCopiedEventArgs.cs
- UTF32Encoding.cs
- AutoSizeComboBox.cs
- WebPartVerbCollection.cs
- QuaternionAnimation.cs
- DrawingCollection.cs
- BuiltInExpr.cs
- TreeBuilder.cs
- TreeNodeEventArgs.cs
- ClearTypeHintValidation.cs
- MetadataItemCollectionFactory.cs
- TypeProvider.cs
- DropTarget.cs
- AutoCompleteStringCollection.cs
- InstanceHandle.cs
- PrintPreviewDialog.cs
- ToolStripContentPanel.cs
- MultiViewDesigner.cs
- APCustomTypeDescriptor.cs
- ClipboardProcessor.cs
- ContentFileHelper.cs
- SerialPort.cs
- Tile.cs
- ThemeDirectoryCompiler.cs
- ControlIdConverter.cs
- Function.cs
- HtmlInputButton.cs
- TextInfo.cs
- DataFieldCollectionEditor.cs
- FusionWrap.cs