Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / CompMod / System / ComponentModel / Design / Serialization / StatementContext.cs / 1 / StatementContext.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel.Design.Serialization { using System; using System.CodeDom; using System.Collections; using System.Collections.Generic; ////// /// This object can be placed on the context stack to provide a place for statements /// to be serialized into. Normally, statements are serialized into whatever statement /// collection that is on the context stack. You can modify this behavior by creating /// a statement context and calling Populate with a collection of objects whose statements /// you would like stored in the statement table. As each object is serialized in /// SerializeToExpression it will have its contents placed in the statement table. /// saved in a table within the context. If you push this object on the stack it is your /// responsibility to integrate the statements added to it into your own collection of statements. /// public sealed class StatementContext { private ObjectStatementCollection _statements; ////// /// This is a table of statements that is offered by the statement context. /// public ObjectStatementCollection StatementCollection { get { if (_statements == null) { _statements = new ObjectStatementCollection(); } return _statements; } } } ////// /// This is a table of statements that is offered by the statement context. /// public sealed class ObjectStatementCollection : IEnumerable { private List_table; private int _version; /// /// Only creatable by the StatementContext. /// internal ObjectStatementCollection() { } ////// Adds an owner to the table. Statements can be null, in which case it /// will be demand created when fished out of the table. This will throw /// if there is already a valid collection for the owner. /// private void AddOwner(object statementOwner, CodeStatementCollection statements) { if (_table == null) { _table = new List(); } else { for (int idx = 0; idx < _table.Count; idx++) { if (object.ReferenceEquals(_table[idx].Owner, statementOwner)) { if (_table[idx].Statements != null) { throw new InvalidOperationException(); } else { if (statements != null) { _table[idx] = new TableEntry(statementOwner, statements); } return; } } } } _table.Add(new TableEntry(statementOwner, statements)); _version++; } /// /// /// Indexer. This will return the statement collection for the given owner. /// It will return null only if the owner is not in the table. /// public CodeStatementCollection this[object statementOwner] { get { if (statementOwner == null) { throw new ArgumentNullException("statementOwner"); } if (_table != null) { for (int idx = 0; idx < _table.Count; idx++) { if (object.ReferenceEquals(_table[idx].Owner, statementOwner)) { if (_table[idx].Statements == null) { _table[idx] = new TableEntry(statementOwner, new CodeStatementCollection()); } return _table[idx].Statements; } } foreach(TableEntry e in _table) { if (object.ReferenceEquals(e.Owner, statementOwner)) { return e.Statements; } } } return null; } } ////// /// Returns true if the given statement owner is in the table. /// public bool ContainsKey(object statementOwner) { if (statementOwner == null) { throw new ArgumentNullException("statementOwner"); } if (_table != null) { return (this[statementOwner] != null); } return false; } ////// /// Returns an enumerator for this table. The keys of the enumerator are statement /// owner objects and the values are instances of CodeStatementCollection. /// public IDictionaryEnumerator GetEnumerator() { return new TableEnumerator(this); } ////// /// This method populates the statement table with a collection of statement owners. /// The creator of the statement context should do this if it wishes statement tables to be used to store /// values for certain objects. /// public void Populate(ICollection statementOwners) { if (statementOwners == null) { throw new ArgumentNullException("statementOwners"); } foreach(object o in statementOwners) { Populate(o); } } ////// /// This method populates the statement table with a collection of statement owners. /// The creator of the statement context should do this if it wishes statement tables to be used to store /// values for certain objects. /// public void Populate(object owner) { if (owner == null) { throw new ArgumentNullException("owner"); } AddOwner(owner, null); } ////// /// Returns an enumerator for this table. The value is a DictionaryEntry containing /// the statement owner and the statement collection. /// IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } private struct TableEntry { public object Owner; public CodeStatementCollection Statements; public TableEntry(object owner, CodeStatementCollection statements) { this.Owner = owner; this.Statements = statements; } } private struct TableEnumerator : IDictionaryEnumerator { private ObjectStatementCollection _table; private int _version; int _position; public TableEnumerator(ObjectStatementCollection table) { _table = table; _version = _table._version; _position = -1; } public object Current { get { return Entry; } } public DictionaryEntry Entry { get { if (_version != _table._version) { throw new InvalidOperationException(); } if (_position < 0 || _table._table == null || _position >= _table._table.Count) { throw new InvalidOperationException(); } if (_table._table[_position].Statements == null) { _table._table[_position] = new TableEntry(_table._table[_position].Owner, new CodeStatementCollection()); } TableEntry entry = _table._table[_position]; return new DictionaryEntry(entry.Owner, entry.Statements); } } public object Key { get { return Entry.Key; } } public object Value { get { return Entry.Value; } } public bool MoveNext() { if (_table._table != null && (_position+1) < _table._table.Count) { _position++; return true; } return false; } public void Reset() { _position = -1; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CustomErrorsSection.cs
- VirtualDirectoryMapping.cs
- DetailsViewDeletedEventArgs.cs
- ArglessEventHandlerProxy.cs
- HierarchicalDataTemplate.cs
- LeaseManager.cs
- XmlTextReaderImpl.cs
- ProjectionPruner.cs
- DbDataAdapter.cs
- XPathSingletonIterator.cs
- BitmapEffectInputData.cs
- HtmlInputImage.cs
- Trace.cs
- AssemblyNameUtility.cs
- SystemTcpConnection.cs
- ItemContainerProviderWrapper.cs
- OleDbCommand.cs
- RsaSecurityToken.cs
- PersistenceException.cs
- SQLSingleStorage.cs
- MetadataHelper.cs
- EncoderNLS.cs
- Point3DAnimationUsingKeyFrames.cs
- DecimalSumAggregationOperator.cs
- HierarchicalDataBoundControl.cs
- FixedSOMPage.cs
- TypeInitializationException.cs
- DataColumnMapping.cs
- HtmlShimManager.cs
- DbConnectionPoolGroupProviderInfo.cs
- NetDataContractSerializer.cs
- AssemblyBuilderData.cs
- CollectionContainer.cs
- AnnouncementClient.cs
- PropertyChangingEventArgs.cs
- CardSpacePolicyElement.cs
- AtomPub10CategoriesDocumentFormatter.cs
- Utils.cs
- WebBrowserNavigatingEventHandler.cs
- XmlSchemaObjectCollection.cs
- cache.cs
- RepeatBehavior.cs
- MediaContextNotificationWindow.cs
- Highlights.cs
- TCPListener.cs
- NullableDoubleMinMaxAggregationOperator.cs
- WebResourceAttribute.cs
- StringExpressionSet.cs
- ApplicationServiceManager.cs
- TransformValueSerializer.cs
- WebPart.cs
- MobileContainerDesigner.cs
- ByteStreamGeometryContext.cs
- TextTrailingCharacterEllipsis.cs
- DBPropSet.cs
- NetDataContractSerializer.cs
- FormViewPagerRow.cs
- LocatorManager.cs
- XPathNodeInfoAtom.cs
- TextParagraphProperties.cs
- GrammarBuilderBase.cs
- FunctionCommandText.cs
- LineBreak.cs
- XslVisitor.cs
- MetadataArtifactLoaderResource.cs
- SqlNodeAnnotations.cs
- InputGestureCollection.cs
- SafeNativeMethods.cs
- KoreanCalendar.cs
- GroupBoxAutomationPeer.cs
- MSG.cs
- DbDeleteCommandTree.cs
- RevocationPoint.cs
- RightsManagementLicense.cs
- KnownTypesProvider.cs
- ProgressBar.cs
- StringStorage.cs
- Rotation3DKeyFrameCollection.cs
- adornercollection.cs
- MediaContextNotificationWindow.cs
- SecurityRuntime.cs
- InputBuffer.cs
- BStrWrapper.cs
- CalendarDateRangeChangingEventArgs.cs
- FunctionImportElement.cs
- SoapEnvelopeProcessingElement.cs
- XmlDownloadManager.cs
- FormatException.cs
- AbstractExpressions.cs
- DiagnosticTrace.cs
- DataPagerFieldCollection.cs
- DataBoundControl.cs
- LightweightCodeGenerator.cs
- COM2ExtendedTypeConverter.cs
- SqlOuterApplyReducer.cs
- MouseButtonEventArgs.cs
- CharAnimationBase.cs
- MorphHelper.cs
- HashCryptoHandle.cs
- XmlDataDocument.cs