Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / TrustUi / MS / Internal / documents / Application / ChainOfDependencies.cs / 1 / ChainOfDependencies.cs
//------------------------------------------------------------------------------ //// Copyright (C) Microsoft Corporation. All rights reserved. // //// A Generic that provides user with the ability to chain dependent objects // of a shared base type and perform actions on them in order of dependency. // // // History: // 08/28/2005: [....]: Initial implementation. //----------------------------------------------------------------------------- namespace MS.Internal.Documents.Application { ////// A Generic that provides user with the ability to chain dependent objects /// of a shared base type and perform actions on them in order of dependency. /// ////// This is different from the chain of responsiblity in the following ways: /// /// - Order of execution in the chain can be inversed by calling LastToFirst. /// - The same operation is performed on each member once. /// /// This class has many methods which are intentionaly recursive. There is /// currently no validation to prevent cyclic dependencies. As the chain is /// currently fixed at compile time there is no need; StackOverFlowException /// durring testing is fine. /// ///A type common to all in the chain. internal static class ChainOfDependencieswhere T : IChainOfDependenciesNode { #region Internal Methods //------------------------------------------------------------------------- // Internal Methods //------------------------------------------------------------------------- /// /// Gets the last member in the chain. (The one with no dependencies.) /// /// The current member. ///The last member in the chain. (The one with no dependencies.) /// internal static T GetLast(T member) { T last = member; if (member.Dependency != null) { last = GetLast(member.Dependency); } return last; } ////// Will perform the action from the member with no dependencies to the most /// dependent member. /// /// The member on which to perform the action. /// The action to perform on the member. ///Returns true if all the actions returned true. internal static bool OrderByLeastDependent( T member, ChainOfDependencies.Action action) { bool satisfied = true; T nextInChain = member.Dependency; if (nextInChain != null) { satisfied = OrderByLeastDependent(nextInChain, action); } if (satisfied) { satisfied = action(member); } else { Trace.SafeWrite( Trace.File, "Dependency for {0}#{1} was not satisfied skipping action.", member.GetType(), member.GetHashCode()); } return satisfied; } /// /// Will perform the action from most dependent to not dependent. /// /// The member on which to perform the action. /// The action to perform on the member. ///Returns true if the all the actions returned true. internal static bool OrderByMostDependent( T member, ChainOfDependencies.Action action) { bool satisfied = action(member); T nextInChain = member.Dependency; if (satisfied) { if (nextInChain != null) { satisfied = OrderByMostDependent(nextInChain, action); } } else { Trace.SafeWrite( Trace.File, "Dependency for {0}#{1} was not satisfied skipping action.", member.GetType(), member.GetHashCode()); } return satisfied; } #endregion Internal Methods #region Internal Delegates //-------------------------------------------------------------------------- // Internal Delegates //------------------------------------------------------------------------- /// /// An action to perform on a ChainOfDependencies member. /// /// The member on which to perform the action. ///True if the dependency was satisfied. internal delegate bool Action(T member); #endregion Internal Delegates } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LinkedList.cs
- GraphicsState.cs
- ProjectionPathSegment.cs
- AliasExpr.cs
- StyleXamlTreeBuilder.cs
- HtmlTextArea.cs
- InputDevice.cs
- Figure.cs
- BasicExpressionVisitor.cs
- XmlAttributeOverrides.cs
- SpellerError.cs
- SafeProcessHandle.cs
- TabPanel.cs
- MethodRental.cs
- GenericUI.cs
- PartitionerStatic.cs
- KnownBoxes.cs
- HebrewNumber.cs
- HtmlTextArea.cs
- _ScatterGatherBuffers.cs
- XmlSchemas.cs
- Cell.cs
- ExpandedWrapper.cs
- Literal.cs
- HtmlEncodedRawTextWriter.cs
- TextPenaltyModule.cs
- DataGridColumn.cs
- MessageSecurityProtocol.cs
- TextSpanModifier.cs
- ExtendedPropertyInfo.cs
- SafeFindHandle.cs
- XmlSchemaAttributeGroupRef.cs
- HtmlLink.cs
- MouseGestureValueSerializer.cs
- MouseActionValueSerializer.cs
- EdmPropertyAttribute.cs
- HotSpotCollection.cs
- cryptoapiTransform.cs
- Ray3DHitTestResult.cs
- SqlNode.cs
- DataError.cs
- KeyboardDevice.cs
- SmiMetaDataProperty.cs
- ObjectSpanRewriter.cs
- __FastResourceComparer.cs
- InstanceDataCollectionCollection.cs
- AnnotationAdorner.cs
- Scripts.cs
- TransformerInfoCollection.cs
- SqlMethodAttribute.cs
- ConnectionProviderAttribute.cs
- webproxy.cs
- SymbolTable.cs
- CodeNamespace.cs
- ComEventsInfo.cs
- ToolboxItem.cs
- SharedUtils.cs
- CodeDomDesignerLoader.cs
- DataViewSetting.cs
- NamespaceEmitter.cs
- WSSecurityOneDotOneReceiveSecurityHeader.cs
- SynthesizerStateChangedEventArgs.cs
- SmiRecordBuffer.cs
- CallbackException.cs
- ClassValidator.cs
- CategoryNameCollection.cs
- NotifyIcon.cs
- ListDesigner.cs
- NullableConverter.cs
- ExclusiveNamedPipeTransportManager.cs
- NativeCppClassAttribute.cs
- AlignmentYValidation.cs
- HttpServerUtilityWrapper.cs
- MutexSecurity.cs
- LayoutInformation.cs
- HitTestWithPointDrawingContextWalker.cs
- DependencyPropertyConverter.cs
- WorkflowNamespace.cs
- RegistryKey.cs
- ExpressionEditorAttribute.cs
- OneOf.cs
- Config.cs
- DbConnectionStringCommon.cs
- elementinformation.cs
- DataGridToolTip.cs
- ConfigXmlSignificantWhitespace.cs
- AssociationSetEnd.cs
- SqlDesignerDataSourceView.cs
- PolyQuadraticBezierSegment.cs
- assemblycache.cs
- WebBrowserHelper.cs
- FillErrorEventArgs.cs
- PasswordPropertyTextAttribute.cs
- CodeCommentStatementCollection.cs
- TypedElement.cs
- XmlSchemaResource.cs
- CodeTypeMemberCollection.cs
- ItemCollection.cs
- CharacterHit.cs
- InheritedPropertyChangedEventArgs.cs