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
- PageVisual.cs
- GeneratedCodeAttribute.cs
- localization.cs
- WindowsFormsHelpers.cs
- EndPoint.cs
- ItemChangedEventArgs.cs
- SmiRecordBuffer.cs
- HtmlDocument.cs
- FormViewDeleteEventArgs.cs
- NgenServicingAttributes.cs
- PlatformCulture.cs
- MobileContainerDesigner.cs
- ToolboxItemFilterAttribute.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- DataBoundLiteralControl.cs
- ToolStripProgressBar.cs
- TypedElement.cs
- MailAddressCollection.cs
- SurrogateSelector.cs
- RepeaterItem.cs
- SqlCommandSet.cs
- BamlResourceDeserializer.cs
- WebPartTracker.cs
- AppModelKnownContentFactory.cs
- XmlSignatureManifest.cs
- TypeSemantics.cs
- NamedPermissionSet.cs
- ArrayTypeMismatchException.cs
- Normalization.cs
- NameValuePermission.cs
- FontFamilyConverter.cs
- CategoryGridEntry.cs
- FacetDescriptionElement.cs
- XmlC14NWriter.cs
- DataGridViewSelectedRowCollection.cs
- EdmToObjectNamespaceMap.cs
- DetailsViewDeleteEventArgs.cs
- ControlCollection.cs
- AuthenticodeSignatureInformation.cs
- MediaScriptCommandRoutedEventArgs.cs
- XmlHelper.cs
- PassportAuthentication.cs
- PageCatalogPart.cs
- RewritingValidator.cs
- ScrollBar.cs
- DataComponentNameHandler.cs
- HtmlHead.cs
- MergablePropertyAttribute.cs
- RepeatInfo.cs
- ResponseStream.cs
- NumberFormatInfo.cs
- Regex.cs
- TableHeaderCell.cs
- SQLBoolean.cs
- TimeoutValidationAttribute.cs
- Decoder.cs
- QilExpression.cs
- ForceCopyBuildProvider.cs
- AlignmentXValidation.cs
- ModelTreeEnumerator.cs
- LoggedException.cs
- SiteOfOriginContainer.cs
- StreamGeometry.cs
- VirtualizedItemProviderWrapper.cs
- SqlConnectionFactory.cs
- Directory.cs
- ListControlDataBindingHandler.cs
- SByte.cs
- SQLByte.cs
- CalendarDesigner.cs
- StackSpiller.Temps.cs
- OraclePermissionAttribute.cs
- ServiceModelSecurityTokenRequirement.cs
- QueryPageSettingsEventArgs.cs
- QueryGenerator.cs
- WebBrowserNavigatedEventHandler.cs
- IgnoreDataMemberAttribute.cs
- CurrentChangingEventManager.cs
- SolidColorBrush.cs
- DesignTimeTemplateParser.cs
- ListViewInsertedEventArgs.cs
- XmlDataSourceNodeDescriptor.cs
- ConnectionString.cs
- AuthenticateEventArgs.cs
- RtfToken.cs
- UnsafeNativeMethodsMilCoreApi.cs
- ActivationArguments.cs
- SqlDataSourceConfigureFilterForm.cs
- BitVec.cs
- HierarchicalDataBoundControlAdapter.cs
- EdmType.cs
- LogArchiveSnapshot.cs
- ToolStripMenuItem.cs
- InputEventArgs.cs
- PersistenceTypeAttribute.cs
- Win32.cs
- Grid.cs
- SmiTypedGetterSetter.cs
- MultiAsyncResult.cs
- WebServiceEnumData.cs