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
- LinqDataSourceDisposeEventArgs.cs
- EarlyBoundInfo.cs
- __Error.cs
- SamlAssertion.cs
- UpdatePanelControlTrigger.cs
- ConfigurationPropertyAttribute.cs
- XmlStringTable.cs
- ToolStripSettings.cs
- DataServices.cs
- ECDiffieHellmanCng.cs
- PropertyManager.cs
- CodeObject.cs
- PtsPage.cs
- XPathCompileException.cs
- TextRangeSerialization.cs
- HyperLinkColumn.cs
- SystemColors.cs
- ListItem.cs
- SystemIcmpV6Statistics.cs
- UrlAuthorizationModule.cs
- ThemeableAttribute.cs
- ConfigErrorGlyph.cs
- ChineseLunisolarCalendar.cs
- SoapAttributeAttribute.cs
- ApplicationTrust.cs
- EntityContainerAssociationSet.cs
- CLRBindingWorker.cs
- HtmlTableRow.cs
- ThousandthOfEmRealPoints.cs
- Activity.cs
- ExeContext.cs
- FileCodeGroup.cs
- KeyInfo.cs
- PropertyFilterAttribute.cs
- EntityDataSourceQueryBuilder.cs
- LambdaReference.cs
- WmlValidatorAdapter.cs
- HtmlTableCellCollection.cs
- DatePicker.cs
- AutoGeneratedField.cs
- Exceptions.cs
- ResourcePermissionBase.cs
- URLIdentityPermission.cs
- DataGridViewRowCancelEventArgs.cs
- HwndProxyElementProvider.cs
- GenericTypeParameterBuilder.cs
- SafeArrayTypeMismatchException.cs
- RegexNode.cs
- DataBoundControlHelper.cs
- ADMembershipUser.cs
- SQLResource.cs
- ToolStripComboBox.cs
- View.cs
- MetadataCacheItem.cs
- HashHelper.cs
- ErrorStyle.cs
- ExpandCollapseProviderWrapper.cs
- Trigger.cs
- RijndaelManaged.cs
- DrawListViewSubItemEventArgs.cs
- SerializableAttribute.cs
- StorageEndPropertyMapping.cs
- RepeatBehavior.cs
- IconBitmapDecoder.cs
- WindowsContainer.cs
- UrlPath.cs
- StorageAssociationSetMapping.cs
- FileEnumerator.cs
- DataGridViewCheckBoxCell.cs
- IdentityManager.cs
- CollaborationHelperFunctions.cs
- DbProviderFactories.cs
- InfoCardRSACryptoProvider.cs
- BamlRecords.cs
- SystemException.cs
- ComEventsInfo.cs
- JournalNavigationScope.cs
- ContentDisposition.cs
- MissingManifestResourceException.cs
- ProviderConnectionPoint.cs
- CodeCastExpression.cs
- ModelPropertyImpl.cs
- TraversalRequest.cs
- Point3DValueSerializer.cs
- DataViewListener.cs
- ManualResetEvent.cs
- SecurityProtocolFactory.cs
- DecodeHelper.cs
- CalendarDesigner.cs
- Section.cs
- ExpressionBuilder.cs
- ExpressionPrefixAttribute.cs
- WorkflowMarkupSerializer.cs
- EUCJPEncoding.cs
- PolicyChain.cs
- StringConverter.cs
- tooltip.cs
- GradientBrush.cs
- X500Name.cs
- InProcStateClientManager.cs