Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- PropertyGeneratedEventArgs.cs
- SqlUDTStorage.cs
- RelationalExpressions.cs
- TdsParserStaticMethods.cs
- ActivationService.cs
- StylusSystemGestureEventArgs.cs
- ChildChangedEventArgs.cs
- QilName.cs
- ScopelessEnumAttribute.cs
- HttpWriter.cs
- HwndSource.cs
- ConfigurationElementCollection.cs
- FormsAuthenticationUser.cs
- Decimal.cs
- UserPreferenceChangedEventArgs.cs
- MasterPageParser.cs
- WebScriptMetadataMessageEncoderFactory.cs
- XmlSchemaSimpleContentExtension.cs
- DataGridHyperlinkColumn.cs
- DataGridViewCellStyleChangedEventArgs.cs
- EntityDesignPluralizationHandler.cs
- Internal.cs
- ProcessHostConfigUtils.cs
- WindowsListViewItemCheckBox.cs
- DropTarget.cs
- LogSwitch.cs
- ParameterBuilder.cs
- WindowsSlider.cs
- SqlProviderServices.cs
- ProcessHostMapPath.cs
- iisPickupDirectory.cs
- Point4DValueSerializer.cs
- SHA256Managed.cs
- CookielessHelper.cs
- PagesChangedEventArgs.cs
- Sql8ConformanceChecker.cs
- x509store.cs
- RepeaterItemCollection.cs
- NameTable.cs
- HttpPostServerProtocol.cs
- MailMessage.cs
- WebPartDisplayModeEventArgs.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- VarRemapper.cs
- RectValueSerializer.cs
- UnsafeNativeMethodsMilCoreApi.cs
- BindUriHelper.cs
- TimelineCollection.cs
- DataServiceBehavior.cs
- IConvertible.cs
- DropDownButton.cs
- ZipIOExtraFieldZip64Element.cs
- BindingsCollection.cs
- Int32Rect.cs
- StaticExtensionConverter.cs
- HostingEnvironment.cs
- Cursors.cs
- Error.cs
- DataControlImageButton.cs
- X500Name.cs
- EventLogTraceListener.cs
- MDIClient.cs
- ComponentChangingEvent.cs
- ConfigurationElementCollection.cs
- Expression.cs
- UrlPropertyAttribute.cs
- WindowVisualStateTracker.cs
- Parameter.cs
- BitmapData.cs
- MulticastOption.cs
- WorkflowDesignerColors.cs
- SessionStateContainer.cs
- Italic.cs
- SessionEndedEventArgs.cs
- CodeDirectiveCollection.cs
- StringUtil.cs
- DataFormat.cs
- JsonServiceDocumentSerializer.cs
- FatalException.cs
- CodeAssignStatement.cs
- BinaryFormatterWriter.cs
- GeneralTransformGroup.cs
- SafeBitVector32.cs
- DeclaredTypeValidator.cs
- JsonReader.cs
- TriState.cs
- ActiveXHost.cs
- ConnectionManager.cs
- SystemException.cs
- MaterialCollection.cs
- UpDownBase.cs
- ValidationHelpers.cs
- SocketException.cs
- MsmqDiagnostics.cs
- IndexedString.cs
- AlphabeticalEnumConverter.cs
- OutputScopeManager.cs
- BoolExpression.cs
- _Semaphore.cs
- XslUrlEditor.cs