Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / KeyToListMap.cs / 1305376 / 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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlSchemaElement.cs
- TextEditorLists.cs
- CLRBindingWorker.cs
- ControlBuilder.cs
- RouteValueDictionary.cs
- ServiceDocumentFormatter.cs
- DatePickerAutomationPeer.cs
- Delegate.cs
- FontNameConverter.cs
- RegisteredHiddenField.cs
- ObjectIDGenerator.cs
- WebSysDisplayNameAttribute.cs
- WindowsListViewItemCheckBox.cs
- DocumentApplication.cs
- DataGridPagerStyle.cs
- Int32CAMarshaler.cs
- RowVisual.cs
- GACIdentityPermission.cs
- ActivityCollectionMarkupSerializer.cs
- ToolBarTray.cs
- HttpResponseHeader.cs
- CharEnumerator.cs
- WorkerRequest.cs
- DataGridViewTextBoxCell.cs
- Quad.cs
- SessionStateSection.cs
- UserPreferenceChangedEventArgs.cs
- IsolatedStorageFilePermission.cs
- CodeAccessPermission.cs
- HttpServerVarsCollection.cs
- TempFiles.cs
- ExpressionBindingCollection.cs
- Point3DCollectionValueSerializer.cs
- DataGridViewRowCollection.cs
- ScriptModule.cs
- FastEncoder.cs
- GPPOINT.cs
- MexNamedPipeBindingElement.cs
- WindowsTab.cs
- KeyboardDevice.cs
- ActiveXHost.cs
- TypeExtension.cs
- LineServices.cs
- SendKeys.cs
- DocumentGridPage.cs
- Rotation3DKeyFrameCollection.cs
- mactripleDES.cs
- AmbientLight.cs
- CodePropertyReferenceExpression.cs
- IsolatedStorageFileStream.cs
- UIHelper.cs
- EmptyElement.cs
- XmlTextAttribute.cs
- FixUp.cs
- Pair.cs
- XPathNavigatorReader.cs
- CellIdBoolean.cs
- ReflectionTypeLoadException.cs
- EventData.cs
- FormViewDeleteEventArgs.cs
- TreeViewImageIndexConverter.cs
- DataGridViewRowPostPaintEventArgs.cs
- ExpressionBuilderCollection.cs
- SqlProcedureAttribute.cs
- PeerNameResolver.cs
- ColumnClickEvent.cs
- EllipticalNodeOperations.cs
- SplitterPanel.cs
- InstanceOwnerException.cs
- BitmapPalettes.cs
- ObjectAnimationUsingKeyFrames.cs
- ResourceManagerWrapper.cs
- IISMapPath.cs
- SecurityException.cs
- Int16KeyFrameCollection.cs
- ChannelManager.cs
- XamlStream.cs
- DynamicRenderer.cs
- SqlRewriteScalarSubqueries.cs
- RuntimeEnvironment.cs
- ParseHttpDate.cs
- DefaultEvaluationContext.cs
- BulletedList.cs
- LinkUtilities.cs
- XXXOnTypeBuilderInstantiation.cs
- ReadOnlyHierarchicalDataSourceView.cs
- NativeMethods.cs
- BinaryParser.cs
- WindowInteropHelper.cs
- ExpanderAutomationPeer.cs
- ProvidePropertyAttribute.cs
- XmlNamespaceMappingCollection.cs
- SoapClientProtocol.cs
- HtmlButton.cs
- Win32SafeHandles.cs
- EventHandlerList.cs
- InkCanvasInnerCanvas.cs
- _LocalDataStoreMgr.cs
- DisplayMemberTemplateSelector.cs
- Matrix3D.cs