Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- ExecutionScope.cs
- tabpagecollectioneditor.cs
- ToolStripScrollButton.cs
- OperatingSystem.cs
- GorillaCodec.cs
- DataGridColumnCollection.cs
- XamlTreeBuilderBamlRecordWriter.cs
- XmlSchemaSimpleTypeList.cs
- XamlWriter.cs
- SpellerError.cs
- Rect.cs
- UnknownBitmapEncoder.cs
- ExpressionBuilder.cs
- ImageKeyConverter.cs
- SqlMetaData.cs
- BreakRecordTable.cs
- HierarchicalDataBoundControlAdapter.cs
- COMException.cs
- SecurityAlgorithmSuite.cs
- PathSegment.cs
- DataPagerCommandEventArgs.cs
- IDataContractSurrogate.cs
- InputBuffer.cs
- DataGridCommandEventArgs.cs
- SecurityRuntime.cs
- PropertyDescriptorGridEntry.cs
- UnSafeCharBuffer.cs
- Buffer.cs
- SpotLight.cs
- PageStatePersister.cs
- EndOfStreamException.cs
- EventLogEntryCollection.cs
- RequestBringIntoViewEventArgs.cs
- GeneratedView.cs
- SByteConverter.cs
- CaseInsensitiveComparer.cs
- _OverlappedAsyncResult.cs
- XhtmlBasicObjectListAdapter.cs
- RadioButtonList.cs
- ADMembershipUser.cs
- Confirm.cs
- WebPartsPersonalization.cs
- ConstantProjectedSlot.cs
- DataColumnCollection.cs
- ValidatingPropertiesEventArgs.cs
- HttpValueCollection.cs
- MachineSettingsSection.cs
- QilUnary.cs
- HandlerFactoryCache.cs
- SourceSwitch.cs
- ToolStripSeparatorRenderEventArgs.cs
- SystemInfo.cs
- Interlocked.cs
- ReflectTypeDescriptionProvider.cs
- Unit.cs
- InheritanceAttribute.cs
- WebPartConnectionsConnectVerb.cs
- StringSource.cs
- DoubleLink.cs
- EnumUnknown.cs
- ControlPropertyNameConverter.cs
- Point4D.cs
- ParallelLoopState.cs
- DBConnectionString.cs
- XmlSchemaObjectCollection.cs
- MachineKeySection.cs
- XmlDownloadManager.cs
- ResolvedKeyFrameEntry.cs
- Package.cs
- ThousandthOfEmRealDoubles.cs
- Soap11ServerProtocol.cs
- CommentEmitter.cs
- DesigntimeLicenseContextSerializer.cs
- FunctionMappingTranslator.cs
- Deflater.cs
- SQLString.cs
- XmlILStorageConverter.cs
- CharKeyFrameCollection.cs
- ISCIIEncoding.cs
- ScrollData.cs
- Math.cs
- CredentialCache.cs
- OpenTypeLayout.cs
- MarkupCompiler.cs
- MediaContext.cs
- DataRowChangeEvent.cs
- HttpDictionary.cs
- TaskScheduler.cs
- CTreeGenerator.cs
- FunctionCommandText.cs
- NotFiniteNumberException.cs
- WebPartDisplayModeCancelEventArgs.cs
- returneventsaver.cs
- Fonts.cs
- WebPartUserCapability.cs
- FloaterParagraph.cs
- FixedLineResult.cs
- ConvertTextFrag.cs
- DataBindingExpressionBuilder.cs
- StringComparer.cs