Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / Vertex.cs / 1305376 / 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
- ColorAnimationUsingKeyFrames.cs
- EditorPartChrome.cs
- RadioButtonPopupAdapter.cs
- FloaterBaseParagraph.cs
- ArgIterator.cs
- IPAddressCollection.cs
- Ipv6Element.cs
- TabControlEvent.cs
- NoneExcludedImageIndexConverter.cs
- SymmetricAlgorithm.cs
- CustomErrorCollection.cs
- basenumberconverter.cs
- InternalConfigConfigurationFactory.cs
- FilteredDataSetHelper.cs
- AsyncOperationManager.cs
- NativeWindow.cs
- WebZone.cs
- Registration.cs
- sqlnorm.cs
- DataGridCellItemAutomationPeer.cs
- MultiPropertyDescriptorGridEntry.cs
- InternalEnumValidator.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- BamlRecords.cs
- DbDataAdapter.cs
- RelationshipSet.cs
- TreeNodeBindingCollection.cs
- SyndicationSerializer.cs
- KeyTime.cs
- ScrollItemProviderWrapper.cs
- Animatable.cs
- TypeSystem.cs
- XmlAttributes.cs
- TemplateBuilder.cs
- ExecutionEngineException.cs
- ScopelessEnumAttribute.cs
- ClientTargetSection.cs
- RepeaterCommandEventArgs.cs
- Facet.cs
- SmiSettersStream.cs
- GeneralTransform3D.cs
- ImageIndexEditor.cs
- TileBrush.cs
- QueryResult.cs
- Int16AnimationUsingKeyFrames.cs
- IsolatedStoragePermission.cs
- TypefaceCollection.cs
- PropertyTab.cs
- SelectedCellsChangedEventArgs.cs
- Form.cs
- RectValueSerializer.cs
- BufferedGenericXmlSecurityToken.cs
- GlyphRun.cs
- TimeStampChecker.cs
- Vector3DAnimationUsingKeyFrames.cs
- PopOutPanel.cs
- DataStreams.cs
- DefaultPrintController.cs
- CodeDOMProvider.cs
- CaseStatementSlot.cs
- PropertyNames.cs
- DeferredRunTextReference.cs
- DiscreteKeyFrames.cs
- FormatConvertedBitmap.cs
- TextTreeFixupNode.cs
- CodeCompiler.cs
- VirtualPathProvider.cs
- TemplateInstanceAttribute.cs
- Int32Animation.cs
- XmlComplianceUtil.cs
- SvcMapFileSerializer.cs
- NativeCompoundFileAPIs.cs
- AutoGeneratedFieldProperties.cs
- XmlHierarchicalEnumerable.cs
- StorageAssociationTypeMapping.cs
- PeerInputChannelListener.cs
- InputLanguage.cs
- CompositeFontFamily.cs
- Comparer.cs
- TableColumn.cs
- BitmapEffectGroup.cs
- PropertyGroupDescription.cs
- UIElement3D.cs
- HtmlInputCheckBox.cs
- Border.cs
- WebPageTraceListener.cs
- RangeValidator.cs
- SizeConverter.cs
- XmlStringTable.cs
- MissingMethodException.cs
- AppearanceEditorPart.cs
- OciLobLocator.cs
- Matrix.cs
- FixedSOMLineCollection.cs
- TemplateControl.cs
- DataGridViewCellStyleConverter.cs
- InternalControlCollection.cs
- WebHttpBinding.cs
- XmlSequenceWriter.cs
- SqlParameter.cs