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
- WebEvents.cs
- xmlglyphRunInfo.cs
- TransformDescriptor.cs
- NonClientArea.cs
- QilTypeChecker.cs
- RightsManagementPermission.cs
- MasterPage.cs
- VariantWrapper.cs
- TextServicesProperty.cs
- PersonalizationDictionary.cs
- FixedTextPointer.cs
- DataError.cs
- ReadOnlyCollection.cs
- SamlAttribute.cs
- StylusButtonCollection.cs
- BinaryMethodMessage.cs
- OciLobLocator.cs
- XmlAttributeProperties.cs
- ToolStripRenderEventArgs.cs
- PageThemeCodeDomTreeGenerator.cs
- CodeIdentifiers.cs
- CatalogPartChrome.cs
- MetaChildrenColumn.cs
- TypeSystem.cs
- ProfileParameter.cs
- ApplicationException.cs
- PanelStyle.cs
- ExecutionScope.cs
- BindingMAnagerBase.cs
- NullEntityWrapper.cs
- ToolStripButton.cs
- KeyboardEventArgs.cs
- METAHEADER.cs
- ObfuscationAttribute.cs
- PopupRootAutomationPeer.cs
- FrameworkContentElement.cs
- JpegBitmapEncoder.cs
- TextAnchor.cs
- DefaultIfEmptyQueryOperator.cs
- CodeConditionStatement.cs
- FigureParaClient.cs
- TraceContextEventArgs.cs
- SQLConvert.cs
- Opcode.cs
- FixedSOMImage.cs
- WebEventCodes.cs
- SimpleWorkerRequest.cs
- SafeSecurityHandles.cs
- WebPartEventArgs.cs
- ContainerParagraph.cs
- ParameterCollection.cs
- ScriptReferenceEventArgs.cs
- WebPartVerbsEventArgs.cs
- ObjectDataSourceEventArgs.cs
- WindowsGraphicsCacheManager.cs
- HtmlTable.cs
- ServiceBuildProvider.cs
- Panel.cs
- Win32SafeHandles.cs
- Validator.cs
- GetRecipientRequest.cs
- DoubleLink.cs
- SocketPermission.cs
- TextElement.cs
- Debug.cs
- ClientData.cs
- LogLogRecordHeader.cs
- BitmapSource.cs
- COM2ExtendedUITypeEditor.cs
- EnumDataContract.cs
- EntityDataSourceDataSelection.cs
- DataGridViewTextBoxEditingControl.cs
- FileSystemEventArgs.cs
- AutoGeneratedField.cs
- Crc32.cs
- TypeReference.cs
- _HeaderInfo.cs
- EncodingDataItem.cs
- QilCloneVisitor.cs
- AccessedThroughPropertyAttribute.cs
- VBCodeProvider.cs
- ResolveMatchesApril2005.cs
- DPAPIProtectedConfigurationProvider.cs
- SoapProtocolImporter.cs
- XmlWrappingReader.cs
- RowParagraph.cs
- ListCollectionView.cs
- MsmqIntegrationBindingCollectionElement.cs
- ExecutedRoutedEventArgs.cs
- ColorMap.cs
- Validator.cs
- DataService.cs
- FormatSettings.cs
- ConfigurationHandlersInstallComponent.cs
- URLIdentityPermission.cs
- BooleanFunctions.cs
- Timeline.cs
- XmlSchemaSequence.cs
- WeakRefEnumerator.cs
- WorkflowTransactionService.cs