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
- PointHitTestResult.cs
- BackStopAuthenticationModule.cs
- XmlUtf8RawTextWriter.cs
- ManageRequest.cs
- PropertyPushdownHelper.cs
- GroupBox.cs
- AttributeUsageAttribute.cs
- CodeSubDirectory.cs
- DragDeltaEventArgs.cs
- PersonalizationStateInfoCollection.cs
- TableRowGroup.cs
- xmlsaver.cs
- FileEnumerator.cs
- RegionInfo.cs
- DesignTimeTemplateParser.cs
- SatelliteContractVersionAttribute.cs
- ArrangedElement.cs
- CodeCompiler.cs
- DrawingBrush.cs
- FixedFindEngine.cs
- HtmlControlPersistable.cs
- LocationSectionRecord.cs
- SizeChangedInfo.cs
- WindowsToolbar.cs
- AbsoluteQuery.cs
- DiscoveryDocumentLinksPattern.cs
- DriveInfo.cs
- ToolStripContainerActionList.cs
- XmlNodeReader.cs
- WebHeaderCollection.cs
- XmlQualifiedName.cs
- _IPv6Address.cs
- ContainerUtilities.cs
- DbConnectionFactory.cs
- LicenseManager.cs
- TypeDependencyAttribute.cs
- CodeDOMUtility.cs
- GeneratedContractType.cs
- XmlSecureResolver.cs
- ReaderOutput.cs
- HwndTarget.cs
- ListItemCollection.cs
- OutputCacheSettingsSection.cs
- SqlBulkCopy.cs
- StateWorkerRequest.cs
- EventLogPermission.cs
- DelayDesigner.cs
- EndpointDiscoveryBehavior.cs
- UidManager.cs
- CompilationLock.cs
- ConnectionInterfaceCollection.cs
- RuleAction.cs
- NGCSerializationManagerAsync.cs
- DataTemplateSelector.cs
- XPathMessageContext.cs
- ExplicitDiscriminatorMap.cs
- ListViewDataItem.cs
- Encoder.cs
- BooleanProjectedSlot.cs
- ScriptReferenceEventArgs.cs
- EventNotify.cs
- DockProviderWrapper.cs
- WebControlAdapter.cs
- FontDifferentiator.cs
- ComPersistableTypeElementCollection.cs
- Point3DKeyFrameCollection.cs
- QilTypeChecker.cs
- SerializationStore.cs
- Int32CollectionConverter.cs
- OperatorExpressions.cs
- ModelPropertyImpl.cs
- OutgoingWebResponseContext.cs
- ListViewCancelEventArgs.cs
- ContentPlaceHolder.cs
- ReliableSessionElement.cs
- ParseHttpDate.cs
- RoleServiceManager.cs
- TraceSource.cs
- ToolStripContainer.cs
- TemplateFactory.cs
- CodeTypeReferenceExpression.cs
- Propagator.JoinPropagator.cs
- WebPartTransformerAttribute.cs
- PartialArray.cs
- CodeChecksumPragma.cs
- AliasExpr.cs
- WindowsClaimSet.cs
- EntityContainerEntitySet.cs
- SHA512.cs
- MimeImporter.cs
- FlowDocumentPage.cs
- SqlUdtInfo.cs
- RIPEMD160.cs
- MobileUserControl.cs
- CodeAccessSecurityEngine.cs
- documentation.cs
- ModelMemberCollection.cs
- SafeWaitHandle.cs
- HasCopySemanticsAttribute.cs
- TemplateApplicationHelper.cs