Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Runtime / Serialization / SerializationInfoEnumerator.cs / 1305376 / 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; using System.Diagnostics.Contracts; // // 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) { Contract.Assert(members!=null, "[SerializationInfoEnumerator.ctor]members!=null"); Contract.Assert(info!=null, "[SerializationInfoEnumerator.ctor]info!=null"); Contract.Assert(types!=null, "[SerializationInfoEnumerator.ctor]types!=null"); Contract.Assert(numItems>=0, "[SerializationInfoEnumerator.ctor]numItems>=0"); Contract.Assert(members.Length>=numItems, "[SerializationInfoEnumerator.ctor]members.Length>=numItems"); Contract.Assert(info.Length>=numItems, "[SerializationInfoEnumerator.ctor]info.Length>=numItems"); Contract.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; using System.Diagnostics.Contracts; // // 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) { Contract.Assert(members!=null, "[SerializationInfoEnumerator.ctor]members!=null"); Contract.Assert(info!=null, "[SerializationInfoEnumerator.ctor]info!=null"); Contract.Assert(types!=null, "[SerializationInfoEnumerator.ctor]types!=null"); Contract.Assert(numItems>=0, "[SerializationInfoEnumerator.ctor]numItems>=0"); Contract.Assert(members.Length>=numItems, "[SerializationInfoEnumerator.ctor]members.Length>=numItems"); Contract.Assert(info.Length>=numItems, "[SerializationInfoEnumerator.ctor]info.Length>=numItems"); Contract.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
- OleDbCommandBuilder.cs
- SeekableReadStream.cs
- ResourceIDHelper.cs
- ResourceCategoryAttribute.cs
- LazyTextWriterCreator.cs
- listitem.cs
- TypeGeneratedEventArgs.cs
- MetadataCache.cs
- DesignerTextWriter.cs
- IsolatedStorageException.cs
- PersonalizableTypeEntry.cs
- FrameworkContentElement.cs
- CompoundFileDeflateTransform.cs
- SyndicationCategory.cs
- GPRECTF.cs
- GridSplitterAutomationPeer.cs
- CustomLineCap.cs
- StreamAsIStream.cs
- activationcontext.cs
- TemplateLookupAction.cs
- WebBrowserUriTypeConverter.cs
- ParallelActivityDesigner.cs
- NotConverter.cs
- AnimationClock.cs
- JournalEntry.cs
- OutputCacheProviderCollection.cs
- dtdvalidator.cs
- DesignBindingEditor.cs
- ProvidersHelper.cs
- DynamicILGenerator.cs
- ISAPIWorkerRequest.cs
- DataGridRow.cs
- PreviewPageInfo.cs
- ArgumentException.cs
- ImageMetadata.cs
- UnhandledExceptionEventArgs.cs
- ImpersonateTokenRef.cs
- RectangleConverter.cs
- SelectedCellsCollection.cs
- InkCanvasInnerCanvas.cs
- UIElementCollection.cs
- WebPartTransformer.cs
- ProfileServiceManager.cs
- UTF7Encoding.cs
- CustomAttributeBuilder.cs
- HierarchicalDataBoundControl.cs
- RegexRunner.cs
- ProfileEventArgs.cs
- TransformPatternIdentifiers.cs
- CachedPathData.cs
- DocumentGridPage.cs
- MissingFieldException.cs
- DateTimeOffset.cs
- WorkflowViewManager.cs
- DataGridViewComboBoxColumnDesigner.cs
- PrintDialog.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- WorkflowRuntimeServicesBehavior.cs
- Tokenizer.cs
- SQLSingleStorage.cs
- XmlUtil.cs
- HTTPNotFoundHandler.cs
- ScrollBar.cs
- AnimationClockResource.cs
- OletxDependentTransaction.cs
- basevalidator.cs
- ReadOnlyDictionary.cs
- Int16AnimationBase.cs
- ViewCellRelation.cs
- XmlAttributeCollection.cs
- ConstantSlot.cs
- PreviewPrintController.cs
- InputProviderSite.cs
- NativeCppClassAttribute.cs
- UDPClient.cs
- AppDomain.cs
- LateBoundBitmapDecoder.cs
- EntityException.cs
- TextEmbeddedObject.cs
- ToolStripDesignerAvailabilityAttribute.cs
- UIElement3D.cs
- SafeMILHandle.cs
- OutputCacheProfileCollection.cs
- NavigationCommands.cs
- Subset.cs
- NotifyParentPropertyAttribute.cs
- NamespaceEmitter.cs
- ToolStripSplitStackLayout.cs
- FilterException.cs
- BindingExpressionUncommonField.cs
- TextAnchor.cs
- KeySpline.cs
- BindingMAnagerBase.cs
- BCLDebug.cs
- Vars.cs
- WindowsSpinner.cs
- OrderPreservingSpoolingTask.cs
- WinFormsComponentEditor.cs
- RangeValidator.cs
- TagPrefixAttribute.cs