Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / BCL / System / Runtime / Serialization / SerializationInfoEnumerator.cs / 1 / SerializationInfoEnumerator.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: SerializationInfoEnumerator ** ** ** Purpose: A formatter-friendly mechanism for walking all of ** the data in a SerializationInfo. Follows the IEnumerator ** mechanism from Collections. ** ** ============================================================*/ namespace System.Runtime.Serialization { using System; using System.Collections; // // The tuple returned by SerializationInfoEnumerator.Current. // [System.Runtime.InteropServices.ComVisible(true)] public struct SerializationEntry { private Type m_type; private Object m_value; private String m_name; public Object Value { get { return m_value; } } public String Name { get { return m_name; } } public Type ObjectType { get { return m_type; } } internal SerializationEntry(String entryName, Object entryValue, Type entryType) { m_value = entryValue; m_name = entryName; m_type = entryType; } } // // A simple enumerator over the values stored in the SerializationInfo. // This does not snapshot the values, it just keeps pointers to the // member variables of the SerializationInfo that created it. // [System.Runtime.InteropServices.ComVisible(true)] public sealed class SerializationInfoEnumerator : IEnumerator { String[] m_members; Object[] m_data; Type[] m_types; int m_numItems; int m_currItem; bool m_current; internal SerializationInfoEnumerator(String[] members, Object[] info, Type[] types, int numItems) { BCLDebug.Assert(members!=null, "[SerializationInfoEnumerator.ctor]members!=null"); BCLDebug.Assert(info!=null, "[SerializationInfoEnumerator.ctor]info!=null"); BCLDebug.Assert(types!=null, "[SerializationInfoEnumerator.ctor]types!=null"); BCLDebug.Assert(numItems>=0, "[SerializationInfoEnumerator.ctor]numItems>=0"); BCLDebug.Assert(members.Length>=numItems, "[SerializationInfoEnumerator.ctor]members.Length>=numItems"); BCLDebug.Assert(info.Length>=numItems, "[SerializationInfoEnumerator.ctor]info.Length>=numItems"); BCLDebug.Assert(types.Length>=numItems, "[SerializationInfoEnumerator.ctor]types.Length>=numItems"); m_members = members; m_data = info; m_types = types; //The MoveNext semantic is much easier if we enforce that [0..m_numItems] are valid entries //in the enumerator, hence we subtract 1. m_numItems = numItems-1; m_currItem = -1; m_current = false; } public bool MoveNext() { if (m_currItemObject IEnumerator.Current { //Actually returns a SerializationEntry get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return (Object)(new SerializationEntry(m_members[m_currItem], m_data[m_currItem], m_types[m_currItem])); } } public SerializationEntry Current { //Actually returns a SerializationEntry get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return (new SerializationEntry(m_members[m_currItem], m_data[m_currItem], m_types[m_currItem])); } } public void Reset() { m_currItem = -1; m_current = false; } public String Name { get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return m_members[m_currItem]; } } public Object Value { get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return m_data[m_currItem]; } } public Type ObjectType { get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return m_types[m_currItem]; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: SerializationInfoEnumerator ** ** ** Purpose: A formatter-friendly mechanism for walking all of ** the data in a SerializationInfo. Follows the IEnumerator ** mechanism from Collections. ** ** ============================================================*/ namespace System.Runtime.Serialization { using System; using System.Collections; // // The tuple returned by SerializationInfoEnumerator.Current. // [System.Runtime.InteropServices.ComVisible(true)] public struct SerializationEntry { private Type m_type; private Object m_value; private String m_name; public Object Value { get { return m_value; } } public String Name { get { return m_name; } } public Type ObjectType { get { return m_type; } } internal SerializationEntry(String entryName, Object entryValue, Type entryType) { m_value = entryValue; m_name = entryName; m_type = entryType; } } // // A simple enumerator over the values stored in the SerializationInfo. // This does not snapshot the values, it just keeps pointers to the // member variables of the SerializationInfo that created it. // [System.Runtime.InteropServices.ComVisible(true)] public sealed class SerializationInfoEnumerator : IEnumerator { String[] m_members; Object[] m_data; Type[] m_types; int m_numItems; int m_currItem; bool m_current; internal SerializationInfoEnumerator(String[] members, Object[] info, Type[] types, int numItems) { BCLDebug.Assert(members!=null, "[SerializationInfoEnumerator.ctor]members!=null"); BCLDebug.Assert(info!=null, "[SerializationInfoEnumerator.ctor]info!=null"); BCLDebug.Assert(types!=null, "[SerializationInfoEnumerator.ctor]types!=null"); BCLDebug.Assert(numItems>=0, "[SerializationInfoEnumerator.ctor]numItems>=0"); BCLDebug.Assert(members.Length>=numItems, "[SerializationInfoEnumerator.ctor]members.Length>=numItems"); BCLDebug.Assert(info.Length>=numItems, "[SerializationInfoEnumerator.ctor]info.Length>=numItems"); BCLDebug.Assert(types.Length>=numItems, "[SerializationInfoEnumerator.ctor]types.Length>=numItems"); m_members = members; m_data = info; m_types = types; //The MoveNext semantic is much easier if we enforce that [0..m_numItems] are valid entries //in the enumerator, hence we subtract 1. m_numItems = numItems-1; m_currItem = -1; m_current = false; } public bool MoveNext() { if (m_currItem Object IEnumerator.Current { //Actually returns a SerializationEntry get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return (Object)(new SerializationEntry(m_members[m_currItem], m_data[m_currItem], m_types[m_currItem])); } } public SerializationEntry Current { //Actually returns a SerializationEntry get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return (new SerializationEntry(m_members[m_currItem], m_data[m_currItem], m_types[m_currItem])); } } public void Reset() { m_currItem = -1; m_current = false; } public String Name { get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return m_members[m_currItem]; } } public Object Value { get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return m_data[m_currItem]; } } public Type ObjectType { get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return m_types[m_currItem]; } } } } // 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
- CodeSnippetExpression.cs
- RuleSettings.cs
- RepeaterItem.cs
- ContextBase.cs
- SqlBulkCopy.cs
- EntitySetBaseCollection.cs
- BindingMemberInfo.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- CategoryNameCollection.cs
- XmlBinaryWriterSession.cs
- DBSchemaRow.cs
- TableLayout.cs
- GeometryConverter.cs
- ConcurrencyBehavior.cs
- QilPatternVisitor.cs
- ReliabilityContractAttribute.cs
- Control.cs
- OdbcFactory.cs
- RightsManagementPermission.cs
- SecurityChannelListener.cs
- IdentityReference.cs
- RelatedView.cs
- CapabilitiesSection.cs
- ContentType.cs
- UrlRoutingModule.cs
- DirectionalLight.cs
- SmiGettersStream.cs
- XmlEncoding.cs
- WhitespaceRule.cs
- InputGestureCollection.cs
- VisualTarget.cs
- BufferBuilder.cs
- String.cs
- HtmlLink.cs
- X509Utils.cs
- MetadataArtifactLoader.cs
- FillErrorEventArgs.cs
- MailDefinition.cs
- TrailingSpaceComparer.cs
- ApplicationException.cs
- ImageUrlEditor.cs
- EncodingNLS.cs
- SQLBytesStorage.cs
- HtmlInputPassword.cs
- XmlSchemaNotation.cs
- SafeHandles.cs
- EntityConnectionStringBuilderItem.cs
- ReadWriteObjectLock.cs
- XomlSerializationHelpers.cs
- EarlyBoundInfo.cs
- QilStrConcatenator.cs
- MeshGeometry3D.cs
- SoapParser.cs
- AttachmentService.cs
- FrameworkName.cs
- CompositeFontInfo.cs
- SoapFaultCodes.cs
- ComAdminInterfaces.cs
- WebPartCatalogAddVerb.cs
- SqlDataSourceQueryEditor.cs
- RMPublishingDialog.cs
- SqlDataSourceRefreshSchemaForm.cs
- ShadowGlyph.cs
- SafeNativeMethods.cs
- Rotation3DAnimationBase.cs
- BindingMemberInfo.cs
- PartialTrustVisibleAssembliesSection.cs
- XmlCharType.cs
- StatusBar.cs
- ToolStripItemRenderEventArgs.cs
- DbRetry.cs
- TableRowGroup.cs
- SafeBitVector32.cs
- XPathNodeInfoAtom.cs
- PolyLineSegmentFigureLogic.cs
- JpegBitmapEncoder.cs
- ImageMap.cs
- EventMappingSettingsCollection.cs
- RunInstallerAttribute.cs
- IdentityNotMappedException.cs
- ConnectionStringSettings.cs
- XmlResolver.cs
- DriveInfo.cs
- OdbcConnectionOpen.cs
- RequestCachingSection.cs
- ParameterBuilder.cs
- TypeBuilder.cs
- XmlHierarchyData.cs
- ReachDocumentReferenceSerializer.cs
- XmlAutoDetectWriter.cs
- SmiRequestExecutor.cs
- PathParser.cs
- AppearanceEditorPart.cs
- DiscoveryMessageSequenceGenerator.cs
- OutOfMemoryException.cs
- WebServiceEnumData.cs
- streamingZipPartStream.cs
- ExclusiveCanonicalizationTransform.cs
- HealthMonitoringSectionHelper.cs
- StyleBamlTreeBuilder.cs