Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / Vertex.cs / 1 / Vertex.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
namespace System.Data.Common.Utils.Boolean
{
using System.Diagnostics;
using System.Globalization;
///
/// A node in a Reduced Ordered Boolean Decision Diagram. Reads as:
///
/// if 'Variable' then 'Then' else 'Else'
///
/// Invariant: the Then and Else children must refer to 'deeper' variables,
/// or variables with a higher value. Otherwise, the graph is not 'Ordered'.
/// All creation of vertices is mediated by the Solver class which ensures
/// each vertex is unique. Otherwise, the graph is not 'Reduced'.
///
sealed class Vertex : IEquatable
{
///
/// Initializes a sink BDD node (zero or one)
///
private Vertex()
{
this.Variable = int.MaxValue;
this.Children = new Vertex[] { };
}
internal Vertex(int variable, Vertex[] children)
{
EntityUtil.BoolExprAssert(variable < int.MaxValue,
"exceeded number of supported variables");
AssertConstructorArgumentsValid(variable, children);
this.Variable = variable;
this.Children = children;
}
[Conditional("DEBUG")]
private static void AssertConstructorArgumentsValid(int variable, Vertex[] children)
{
Debug.Assert(null != children, "internal vertices must define children");
Debug.Assert(2 <= children.Length, "internal vertices must have at least two children");
Debug.Assert(0 < variable, "internal vertices must have 0 < variable");
foreach (Vertex child in children)
{
Debug.Assert(variable < child.Variable, "children must have greater variable");
}
}
///
/// Sink node representing the Boolean function '1' (true)
///
internal static readonly Vertex One = new Vertex();
///
/// Sink node representing the Boolean function '0' (false)
///
internal static readonly Vertex Zero = new Vertex();
///
/// Gets the variable tested by this vertex. If this is a sink node, returns
/// int.MaxValue since there is no variable to test (and since this is a leaf,
/// this non-existent variable is 'deeper' than any existing variable; the
/// variable value is larger than any real variable)
///
internal readonly int Variable;
///
/// Note: do not modify elements.
/// Gets the result when Variable evaluates to true. If this is a sink node,
/// returns null.
///
internal readonly Vertex[] Children;
///
/// Returns true if this is '1'.
///
internal bool IsOne()
{
return object.ReferenceEquals(Vertex.One, this);
}
///
/// Returns true if this is '0'.
///
internal bool IsZero()
{
return object.ReferenceEquals(Vertex.Zero, this);
}
///
/// Returns true if this is '0' or '1'.
///
internal bool IsSink()
{
return Variable == int.MaxValue;
}
public bool Equals(Vertex other)
{
return object.ReferenceEquals(this, other);
}
public override bool Equals(object obj)
{
Debug.Fail("used typed Equals");
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public override string ToString()
{
if (IsOne())
{
return "_1_";
}
if (IsZero())
{
return "_0_";
}
return String.Format(CultureInfo.InvariantCulture, "<{0}, {1}>", Variable, StringUtil.ToCommaSeparatedString(Children));
}
}
}
// 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;
namespace System.Data.Common.Utils.Boolean
{
using System.Diagnostics;
using System.Globalization;
///
/// A node in a Reduced Ordered Boolean Decision Diagram. Reads as:
///
/// if 'Variable' then 'Then' else 'Else'
///
/// Invariant: the Then and Else children must refer to 'deeper' variables,
/// or variables with a higher value. Otherwise, the graph is not 'Ordered'.
/// All creation of vertices is mediated by the Solver class which ensures
/// each vertex is unique. Otherwise, the graph is not 'Reduced'.
///
sealed class Vertex : IEquatable
{
///
/// Initializes a sink BDD node (zero or one)
///
private Vertex()
{
this.Variable = int.MaxValue;
this.Children = new Vertex[] { };
}
internal Vertex(int variable, Vertex[] children)
{
EntityUtil.BoolExprAssert(variable < int.MaxValue,
"exceeded number of supported variables");
AssertConstructorArgumentsValid(variable, children);
this.Variable = variable;
this.Children = children;
}
[Conditional("DEBUG")]
private static void AssertConstructorArgumentsValid(int variable, Vertex[] children)
{
Debug.Assert(null != children, "internal vertices must define children");
Debug.Assert(2 <= children.Length, "internal vertices must have at least two children");
Debug.Assert(0 < variable, "internal vertices must have 0 < variable");
foreach (Vertex child in children)
{
Debug.Assert(variable < child.Variable, "children must have greater variable");
}
}
///
/// Sink node representing the Boolean function '1' (true)
///
internal static readonly Vertex One = new Vertex();
///
/// Sink node representing the Boolean function '0' (false)
///
internal static readonly Vertex Zero = new Vertex();
///
/// Gets the variable tested by this vertex. If this is a sink node, returns
/// int.MaxValue since there is no variable to test (and since this is a leaf,
/// this non-existent variable is 'deeper' than any existing variable; the
/// variable value is larger than any real variable)
///
internal readonly int Variable;
///
/// Note: do not modify elements.
/// Gets the result when Variable evaluates to true. If this is a sink node,
/// returns null.
///
internal readonly Vertex[] Children;
///
/// Returns true if this is '1'.
///
internal bool IsOne()
{
return object.ReferenceEquals(Vertex.One, this);
}
///
/// Returns true if this is '0'.
///
internal bool IsZero()
{
return object.ReferenceEquals(Vertex.Zero, this);
}
///
/// Returns true if this is '0' or '1'.
///
internal bool IsSink()
{
return Variable == int.MaxValue;
}
public bool Equals(Vertex other)
{
return object.ReferenceEquals(this, other);
}
public override bool Equals(object obj)
{
Debug.Fail("used typed Equals");
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public override string ToString()
{
if (IsOne())
{
return "_1_";
}
if (IsZero())
{
return "_0_";
}
return String.Format(CultureInfo.InvariantCulture, "<{0}, {1}>", Variable, StringUtil.ToCommaSeparatedString(Children));
}
}
}
// 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
- GenerateTemporaryTargetAssembly.cs
- EventMappingSettingsCollection.cs
- NavigationFailedEventArgs.cs
- HtmlElementErrorEventArgs.cs
- DebugController.cs
- ArrayList.cs
- ClusterSafeNativeMethods.cs
- BamlLocalizableResource.cs
- ProfileProvider.cs
- Run.cs
- PipeStream.cs
- ScrollContentPresenter.cs
- SqlUDTStorage.cs
- TemplatedWizardStep.cs
- GC.cs
- SecUtil.cs
- SymbolEqualComparer.cs
- ResourceDisplayNameAttribute.cs
- ListItemCollection.cs
- SymbolTable.cs
- TableLayoutCellPaintEventArgs.cs
- QuaternionRotation3D.cs
- IconBitmapDecoder.cs
- WindowsFormsHostAutomationPeer.cs
- SoapCodeExporter.cs
- LineBreak.cs
- ACL.cs
- SamlAuthorizationDecisionStatement.cs
- CultureSpecificStringDictionary.cs
- CodeTypeReferenceExpression.cs
- TreeViewImageIndexConverter.cs
- MediaContext.cs
- CompressionTransform.cs
- VisualCollection.cs
- GenericPrincipal.cs
- StreamReader.cs
- DataAdapter.cs
- IListConverters.cs
- SID.cs
- DataServiceSaveChangesEventArgs.cs
- CubicEase.cs
- Timer.cs
- MaterialGroup.cs
- ContentElement.cs
- XmlWriterDelegator.cs
- AnimationException.cs
- MdiWindowListItemConverter.cs
- XpsDigitalSignature.cs
- SchemaAttDef.cs
- EpmHelper.cs
- BasicKeyConstraint.cs
- TemplateParser.cs
- HttpServerUtilityWrapper.cs
- PolyBezierSegment.cs
- keycontainerpermission.cs
- RepeaterDesigner.cs
- DBBindings.cs
- FormViewUpdatedEventArgs.cs
- ValueSerializer.cs
- FrameworkElementFactory.cs
- Site.cs
- CreateCardRequest.cs
- WindowsServiceElement.cs
- TextRunCacheImp.cs
- _SpnDictionary.cs
- NativeWindow.cs
- SafeThreadHandle.cs
- FormattedTextSymbols.cs
- ImageSourceValueSerializer.cs
- XmlSerializer.cs
- WebColorConverter.cs
- EmissiveMaterial.cs
- AnonymousIdentificationSection.cs
- GeneratedCodeAttribute.cs
- ColorAnimationBase.cs
- WebPartConnection.cs
- Evidence.cs
- SimpleMailWebEventProvider.cs
- FixedSOMGroup.cs
- SevenBitStream.cs
- TcpClientChannel.cs
- TypeContext.cs
- ToolStripControlHost.cs
- SystemDropShadowChrome.cs
- AppSecurityManager.cs
- ReadOnlyTernaryTree.cs
- DynamicPropertyHolder.cs
- Expression.cs
- SmtpFailedRecipientException.cs
- ObjectQueryState.cs
- HTMLTextWriter.cs
- xmlsaver.cs
- SqlBuilder.cs
- SmiEventSink_DeferedProcessing.cs
- DateTimeStorage.cs
- StrokeFIndices.cs
- WebPartDisplayMode.cs
- HtmlInputHidden.cs
- Root.cs
- EntityDataSourceWrapperPropertyDescriptor.cs