Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / CompMod / System / ComponentModel / Design / Serialization / ContextStack.cs / 1 / ContextStack.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel.Design.Serialization { using System; using System.Collections; using System.Security.Permissions; ////// A context stack is an object that can be used by serializers /// to push various context objects. Serialization is often /// a deeply nested operation, involving many different /// serialization classes. These classes often need additional /// context information when performing serialization. As /// an example, an object with a property named "Enabled" may have /// a data type of System.Boolean. If a serializer is writing /// this value to a data stream it may want to know what property /// it is writing. It won't have this information, however, because /// it is only instructed to write the boolean value. In this /// case the parent serializer may push a PropertyDescriptor /// pointing to the "Enabled" property on the context stack. /// What objects get pushed on this stack are up to the /// individual serializer objects. /// [HostProtection(SharedState = true)] [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name = "FullTrust")] public sealed class ContextStack { private ArrayList contextStack; ////// Retrieves the current object on the stack, or null /// if no objects have been pushed. /// public object Current { get { if (contextStack != null && contextStack.Count > 0) { return contextStack[contextStack.Count - 1]; } return null; } } ////// Retrieves the object on the stack at the given /// level, or null if no object exists at that level. /// public object this[int level] { get { if (level < 0) { throw new ArgumentOutOfRangeException("level"); } if (contextStack != null && level < contextStack.Count) { return contextStack[contextStack.Count - 1 - level]; } return null; } } ////// Retrieves the first object on the stack that /// inherits from or implements the given type, or /// null if no object on the stack implements the type. /// public object this[Type type] { get { if (type == null) { throw new ArgumentNullException("type"); } if (contextStack != null) { int level = contextStack.Count; while(level > 0) { object value = contextStack[--level]; if (type.IsInstanceOfType(value)) { return value; } } } return null; } } ////// Appends an object to the end of the stack, rather than pushing it /// onto the top of the stack. This method allows a serializer to communicate /// with other serializers by adding contextual data that does not have to /// be popped in order. There is no way to remove an object that was /// appended to the end of the stack without popping all other objects. /// public void Append(object context) { if (context == null) { throw new ArgumentNullException("context"); } if (contextStack == null) { contextStack = new ArrayList(); } contextStack.Insert(0, context); } ////// Pops the current object off of the stack, returning /// its value. /// public object Pop() { object context = null; if (contextStack != null && contextStack.Count > 0) { int idx = contextStack.Count - 1; context = contextStack[idx]; contextStack.RemoveAt(idx); } return context; } ////// Pushes the given object onto the stack. /// public void Push(object context) { if (context == null) { throw new ArgumentNullException("context"); } if (contextStack == null) { contextStack = new ArrayList(); } contextStack.Add(context); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel.Design.Serialization { using System; using System.Collections; using System.Security.Permissions; ////// A context stack is an object that can be used by serializers /// to push various context objects. Serialization is often /// a deeply nested operation, involving many different /// serialization classes. These classes often need additional /// context information when performing serialization. As /// an example, an object with a property named "Enabled" may have /// a data type of System.Boolean. If a serializer is writing /// this value to a data stream it may want to know what property /// it is writing. It won't have this information, however, because /// it is only instructed to write the boolean value. In this /// case the parent serializer may push a PropertyDescriptor /// pointing to the "Enabled" property on the context stack. /// What objects get pushed on this stack are up to the /// individual serializer objects. /// [HostProtection(SharedState = true)] [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name = "FullTrust")] public sealed class ContextStack { private ArrayList contextStack; ////// Retrieves the current object on the stack, or null /// if no objects have been pushed. /// public object Current { get { if (contextStack != null && contextStack.Count > 0) { return contextStack[contextStack.Count - 1]; } return null; } } ////// Retrieves the object on the stack at the given /// level, or null if no object exists at that level. /// public object this[int level] { get { if (level < 0) { throw new ArgumentOutOfRangeException("level"); } if (contextStack != null && level < contextStack.Count) { return contextStack[contextStack.Count - 1 - level]; } return null; } } ////// Retrieves the first object on the stack that /// inherits from or implements the given type, or /// null if no object on the stack implements the type. /// public object this[Type type] { get { if (type == null) { throw new ArgumentNullException("type"); } if (contextStack != null) { int level = contextStack.Count; while(level > 0) { object value = contextStack[--level]; if (type.IsInstanceOfType(value)) { return value; } } } return null; } } ////// Appends an object to the end of the stack, rather than pushing it /// onto the top of the stack. This method allows a serializer to communicate /// with other serializers by adding contextual data that does not have to /// be popped in order. There is no way to remove an object that was /// appended to the end of the stack without popping all other objects. /// public void Append(object context) { if (context == null) { throw new ArgumentNullException("context"); } if (contextStack == null) { contextStack = new ArrayList(); } contextStack.Insert(0, context); } ////// Pops the current object off of the stack, returning /// its value. /// public object Pop() { object context = null; if (contextStack != null && contextStack.Count > 0) { int idx = contextStack.Count - 1; context = contextStack[idx]; contextStack.RemoveAt(idx); } return context; } ////// Pushes the given object onto the stack. /// public void Push(object context) { if (context == null) { throw new ArgumentNullException("context"); } if (contextStack == null) { contextStack = new ArrayList(); } contextStack.Add(context); } } } // 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
- FastPropertyAccessor.cs
- MsmqUri.cs
- MouseEvent.cs
- FormViewInsertEventArgs.cs
- DecoderReplacementFallback.cs
- FlowDocumentPage.cs
- DrawingContextDrawingContextWalker.cs
- SafeTimerHandle.cs
- ContentTextAutomationPeer.cs
- LoginName.cs
- TypeToken.cs
- DataTable.cs
- PropertyPath.cs
- FilterException.cs
- WebException.cs
- EmptyControlCollection.cs
- columnmapkeybuilder.cs
- WebExceptionStatus.cs
- FixedSchema.cs
- CompiledQuery.cs
- Sequence.cs
- VisualCollection.cs
- TransformGroup.cs
- HyperLink.cs
- MailBnfHelper.cs
- TouchEventArgs.cs
- AmbientValueAttribute.cs
- DocumentSequenceHighlightLayer.cs
- XamlBrushSerializer.cs
- HiddenField.cs
- PropVariant.cs
- TimeStampChecker.cs
- DataSysAttribute.cs
- NavigationProperty.cs
- AsyncPostBackTrigger.cs
- Splitter.cs
- HostingPreferredMapPath.cs
- ResolveMatchesApril2005.cs
- Socket.cs
- SmtpException.cs
- WebPartsPersonalizationAuthorization.cs
- MaterialGroup.cs
- Exception.cs
- EventMap.cs
- MenuBase.cs
- Set.cs
- UnknownBitmapEncoder.cs
- TextAnchor.cs
- FontEditor.cs
- ObjectQueryExecutionPlan.cs
- DiagnosticEventProvider.cs
- KnowledgeBase.cs
- Odbc32.cs
- NamespaceDecl.cs
- DesignOnlyAttribute.cs
- DataGridViewComboBoxEditingControl.cs
- QueryStringParameter.cs
- PhysicalOps.cs
- SqlUDTStorage.cs
- Native.cs
- mediaclock.cs
- FreezableDefaultValueFactory.cs
- BaseCollection.cs
- Run.cs
- LayoutUtils.cs
- BuildProvidersCompiler.cs
- ReadOnlyCollectionBase.cs
- PlatformNotSupportedException.cs
- PropertyMapper.cs
- PassportPrincipal.cs
- ProjectionPruner.cs
- BitmapSourceSafeMILHandle.cs
- JsonGlobals.cs
- XMLDiffLoader.cs
- Descriptor.cs
- SspiSecurityTokenParameters.cs
- Pkcs7Signer.cs
- sqlser.cs
- ProfilePropertySettingsCollection.cs
- CorePropertiesFilter.cs
- SymmetricAlgorithm.cs
- SecurityDescriptor.cs
- DesignerToolboxInfo.cs
- AttachedPropertyBrowsableAttribute.cs
- OdbcException.cs
- LinearGradientBrush.cs
- Canvas.cs
- PersonalizationEntry.cs
- ContextBase.cs
- WindowsEditBox.cs
- Logging.cs
- BitmapSourceSafeMILHandle.cs
- CallSite.cs
- AssociationTypeEmitter.cs
- OrderablePartitioner.cs
- QuaternionAnimationBase.cs
- DataColumnChangeEvent.cs
- Separator.cs
- GeneralTransform3DCollection.cs
- ConfigXmlWhitespace.cs