Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Common / Utils / KeyToListMap.cs / 3 / KeyToListMap.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.Collections.ObjectModel; namespace System.Data.Common.Utils { // This class contains an abstraction that map a key of type TKey to a // list of values (of type TValue). This is really a convenience abstraction internal class KeyToListMap: InternalBase { #region Constructors // effects: Creates an empty map with keys compared using comparer internal KeyToListMap(IEqualityComparer comparer) { Debug.Assert(null != comparer); m_map = new Dictionary >(comparer); } #endregion #region Fields // Just a regular dictionary private Dictionary > m_map; #endregion #region Properties // effects: Yields all the keys in this internal IEnumerable Keys { get { return m_map.Keys; } } // effects: Returns all the values for all keys with all the values // of a particular key adjacent to each other internal IEnumerable AllValues { get { foreach (TKey key in Keys) { foreach (TValue value in ListForKey(key)) { yield return value; } } } } // effects: Returns all the Dictionary Entries in this Map. internal IEnumerable >> KeyValuePairs { get { return m_map; } } #endregion #region Methods internal bool ContainsKey(TKey key) { return m_map.ContainsKey(key); } // effects: Adds to this. If the entry already exists, another one is added internal void Add(TKey key, TValue value) { // If entry for key already exists, add value to the list, else // create a new list and add the value to it List valueList; if (!m_map.TryGetValue(key, out valueList)) { valueList = new List (); m_map[key] = valueList; } valueList.Add(value); } // effects: Adds for each value in values to this. If the entry already exists, another one is added internal void AddRange(TKey key, IEnumerable values) { foreach (TValue value in values) { Add(key, value); } } // effects: Removes all entries corresponding to key // Returns true iff the key was removed internal bool RemoveKey(TKey key) { return m_map.Remove(key); } // requires: key exist in this // effects: Returns the values associated with key internal System.Collections.ObjectModel.ReadOnlyCollection ListForKey(TKey key) { Debug.Assert(m_map.ContainsKey(key), "key not registered in map"); return new System.Collections.ObjectModel.ReadOnlyCollection (m_map[key]); } // effects: Returns true if the key exists and false if not. // In case the Key exists, the out parameter is assigned the List for that key, // otherwise it is assigned a null value internal bool TryGetListForKey(TKey key, out System.Collections.ObjectModel.ReadOnlyCollection valueCollection) { List list; valueCollection = null; if (m_map.TryGetValue(key, out list)) { valueCollection = new System.Collections.ObjectModel.ReadOnlyCollection (list); return true; } return false; } // Returns all values for the given key. If no values have been added for the key, // yields no values. internal IEnumerable EnumerateValues(TKey key) { List values; if (m_map.TryGetValue(key, out values)) { foreach (TValue value in values) { yield return value; } } } internal override void ToCompactString(StringBuilder builder) { foreach (TKey key in Keys) { // Calling key's ToString here StringUtil.FormatStringBuilder(builder, "{0}", key); builder.Append(": "); IEnumerable values = ListForKey(key); StringUtil.ToSeparatedString(builder, values, ",", "null"); builder.Append("; "); } } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.Collections.ObjectModel; namespace System.Data.Common.Utils { // This class contains an abstraction that map a key of type TKey to a // list of values (of type TValue). This is really a convenience abstraction internal class KeyToListMap: InternalBase { #region Constructors // effects: Creates an empty map with keys compared using comparer internal KeyToListMap(IEqualityComparer comparer) { Debug.Assert(null != comparer); m_map = new Dictionary >(comparer); } #endregion #region Fields // Just a regular dictionary private Dictionary > m_map; #endregion #region Properties // effects: Yields all the keys in this internal IEnumerable Keys { get { return m_map.Keys; } } // effects: Returns all the values for all keys with all the values // of a particular key adjacent to each other internal IEnumerable AllValues { get { foreach (TKey key in Keys) { foreach (TValue value in ListForKey(key)) { yield return value; } } } } // effects: Returns all the Dictionary Entries in this Map. internal IEnumerable >> KeyValuePairs { get { return m_map; } } #endregion #region Methods internal bool ContainsKey(TKey key) { return m_map.ContainsKey(key); } // effects: Adds to this. If the entry already exists, another one is added internal void Add(TKey key, TValue value) { // If entry for key already exists, add value to the list, else // create a new list and add the value to it List valueList; if (!m_map.TryGetValue(key, out valueList)) { valueList = new List (); m_map[key] = valueList; } valueList.Add(value); } // effects: Adds for each value in values to this. If the entry already exists, another one is added internal void AddRange(TKey key, IEnumerable values) { foreach (TValue value in values) { Add(key, value); } } // effects: Removes all entries corresponding to key // Returns true iff the key was removed internal bool RemoveKey(TKey key) { return m_map.Remove(key); } // requires: key exist in this // effects: Returns the values associated with key internal System.Collections.ObjectModel.ReadOnlyCollection ListForKey(TKey key) { Debug.Assert(m_map.ContainsKey(key), "key not registered in map"); return new System.Collections.ObjectModel.ReadOnlyCollection (m_map[key]); } // effects: Returns true if the key exists and false if not. // In case the Key exists, the out parameter is assigned the List for that key, // otherwise it is assigned a null value internal bool TryGetListForKey(TKey key, out System.Collections.ObjectModel.ReadOnlyCollection valueCollection) { List list; valueCollection = null; if (m_map.TryGetValue(key, out list)) { valueCollection = new System.Collections.ObjectModel.ReadOnlyCollection (list); return true; } return false; } // Returns all values for the given key. If no values have been added for the key, // yields no values. internal IEnumerable EnumerateValues(TKey key) { List values; if (m_map.TryGetValue(key, out values)) { foreach (TValue value in values) { yield return value; } } } internal override void ToCompactString(StringBuilder builder) { foreach (TKey key in Keys) { // Calling key's ToString here StringUtil.FormatStringBuilder(builder, "{0}", key); builder.Append(": "); IEnumerable values = ListForKey(key); StringUtil.ToSeparatedString(builder, values, ",", "null"); builder.Append("; "); } } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CopyNamespacesAction.cs
- SchemaMapping.cs
- HostingPreferredMapPath.cs
- Table.cs
- Clause.cs
- CodeTypeReferenceExpression.cs
- SchemaDeclBase.cs
- Path.cs
- MessagingDescriptionAttribute.cs
- SqlServer2KCompatibilityCheck.cs
- XmlAnyAttributeAttribute.cs
- FixedSOMPage.cs
- ListMarkerLine.cs
- HttpSessionStateWrapper.cs
- AnyAllSearchOperator.cs
- HostingPreferredMapPath.cs
- DataChangedEventManager.cs
- ImageMap.cs
- SafeArrayTypeMismatchException.cs
- ConvertersCollection.cs
- sqlmetadatafactory.cs
- DbConnectionStringBuilder.cs
- ConnectionStringsSection.cs
- CryptoHandle.cs
- EmbossBitmapEffect.cs
- DefaultProxySection.cs
- InputBinding.cs
- SqlClientPermission.cs
- OdbcDataReader.cs
- DictionaryContent.cs
- BamlRecords.cs
- Peer.cs
- ContactManager.cs
- StringInfo.cs
- ToolStripItemEventArgs.cs
- OleDbReferenceCollection.cs
- FixedSOMSemanticBox.cs
- EmptyEnumerable.cs
- TextServicesCompartmentContext.cs
- EntityDataSourceContextCreatedEventArgs.cs
- ValidationHelpers.cs
- SafePEFileHandle.cs
- DataGridViewColumnHeaderCell.cs
- ZoneMembershipCondition.cs
- XmlSchemaAnyAttribute.cs
- AppDomainAttributes.cs
- AnimationClock.cs
- WindowsFormsHost.cs
- TemplateBamlTreeBuilder.cs
- MulticastNotSupportedException.cs
- CryptoProvider.cs
- IApplicationTrustManager.cs
- ObjectDataSourceEventArgs.cs
- ScrollProperties.cs
- CodeTypeParameter.cs
- WaitForChangedResult.cs
- StorageMappingItemLoader.cs
- _HelperAsyncResults.cs
- PersonalizationDictionary.cs
- initElementDictionary.cs
- DesignerActionMethodItem.cs
- ApplicationServiceManager.cs
- Translator.cs
- DesignerActionHeaderItem.cs
- FaultPropagationQuery.cs
- SendOperation.cs
- SoapSchemaImporter.cs
- EntityDataSourceWrapper.cs
- MinimizableAttributeTypeConverter.cs
- ImageSourceValueSerializer.cs
- Context.cs
- WebBrowserSiteBase.cs
- WindowsToolbarAsMenu.cs
- DebugController.cs
- EdmType.cs
- InputGestureCollection.cs
- xmlglyphRunInfo.cs
- HttpRequest.cs
- PropVariant.cs
- WebReference.cs
- AdapterDictionary.cs
- GroupBox.cs
- ZipFileInfo.cs
- PointValueSerializer.cs
- DateTimePicker.cs
- NamespaceDecl.cs
- DataGrid.cs
- SingleResultAttribute.cs
- URI.cs
- _ListenerRequestStream.cs
- ConfigurationCollectionAttribute.cs
- ChtmlTextWriter.cs
- SessionPageStateSection.cs
- wgx_commands.cs
- ArrayListCollectionBase.cs
- Literal.cs
- TableCellCollection.cs
- SectionVisual.cs
- ThemeInfoAttribute.cs
- EntityTypeEmitter.cs