Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / xsp / System / Web / Extensions / Util / OrderedDictionary.cs / 1 / OrderedDictionary.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { using System; using System.Collections; using System.Collections.Generic; internal class OrderedDictionary: IDictionary { private Dictionary _dictionary; private List _keys; private List _values; // Cannot easily support ctor that takes IEqualityComparer, since List doesn't have an easy // way to use the IEqualityComparer. public OrderedDictionary() : this(0) { } public OrderedDictionary(int capacity) { _dictionary = new Dictionary (capacity); _keys = new List (capacity); _values = new List (capacity); } public int Count { get { return _dictionary.Count; } } public ICollection Keys { get { return _keys.AsReadOnly(); } } public TValue this[TKey key] { get { return _dictionary[key]; } set { // If key has already been added, we must first remove it from the lists so it is not // in the lists multiple times. RemoveFromLists(key); _dictionary[key] = value; _keys.Add(key); _values.Add(value); } } public ICollection Values { get { return _values.AsReadOnly(); } } public void Add(TKey key, TValue value) { // Dictionary.Add() will throw if it already contains key _dictionary.Add(key, value); _keys.Add(key); _values.Add(value); } public void Clear() { _dictionary.Clear(); _keys.Clear(); _values.Clear(); } public bool ContainsKey(TKey key) { return _dictionary.ContainsKey(key); } public bool ContainsValue(TValue value) { return _dictionary.ContainsValue(value); } public IEnumerator > GetEnumerator() { int i = 0; // Must use foreach instead of a for loop, since we want the underlying List enumerator to // throw an exception if the list is modified during enumeration. foreach (TKey key in _keys) { yield return new KeyValuePair (key, _values[i]); i++; } } private void RemoveFromLists(TKey key) { int index = _keys.IndexOf(key); if (index != -1) { _keys.RemoveAt(index); _values.RemoveAt(index); } } public bool Remove(TKey key) { RemoveFromLists(key); return _dictionary.Remove(key); } public bool TryGetValue(TKey key, out TValue value) { return _dictionary.TryGetValue(key, out value); } #region ICollection > Members bool ICollection >.IsReadOnly { get { return ((ICollection >)_dictionary).IsReadOnly; } } void ICollection >.Add(KeyValuePair item) { Add(item.Key, item.Value); } bool ICollection >.Contains(KeyValuePair item) { return ((ICollection >)_dictionary).Contains(item); } void ICollection >.CopyTo(KeyValuePair [] array, int arrayIndex) { ((ICollection >)_dictionary).CopyTo(array, arrayIndex); } bool ICollection >.Remove(KeyValuePair item) { bool removed = ((ICollection >)_dictionary).Remove(item); // Only remove from lists if it was removed from the dictionary, since the dictionary may contain // the key but not the value. if (removed) { RemoveFromLists(item.Key); } return removed; } #endregion #region IEnumerable Members IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { using System; using System.Collections; using System.Collections.Generic; internal class OrderedDictionary: IDictionary { private Dictionary _dictionary; private List _keys; private List _values; // Cannot easily support ctor that takes IEqualityComparer, since List doesn't have an easy // way to use the IEqualityComparer. public OrderedDictionary() : this(0) { } public OrderedDictionary(int capacity) { _dictionary = new Dictionary (capacity); _keys = new List (capacity); _values = new List (capacity); } public int Count { get { return _dictionary.Count; } } public ICollection Keys { get { return _keys.AsReadOnly(); } } public TValue this[TKey key] { get { return _dictionary[key]; } set { // If key has already been added, we must first remove it from the lists so it is not // in the lists multiple times. RemoveFromLists(key); _dictionary[key] = value; _keys.Add(key); _values.Add(value); } } public ICollection Values { get { return _values.AsReadOnly(); } } public void Add(TKey key, TValue value) { // Dictionary.Add() will throw if it already contains key _dictionary.Add(key, value); _keys.Add(key); _values.Add(value); } public void Clear() { _dictionary.Clear(); _keys.Clear(); _values.Clear(); } public bool ContainsKey(TKey key) { return _dictionary.ContainsKey(key); } public bool ContainsValue(TValue value) { return _dictionary.ContainsValue(value); } public IEnumerator > GetEnumerator() { int i = 0; // Must use foreach instead of a for loop, since we want the underlying List enumerator to // throw an exception if the list is modified during enumeration. foreach (TKey key in _keys) { yield return new KeyValuePair (key, _values[i]); i++; } } private void RemoveFromLists(TKey key) { int index = _keys.IndexOf(key); if (index != -1) { _keys.RemoveAt(index); _values.RemoveAt(index); } } public bool Remove(TKey key) { RemoveFromLists(key); return _dictionary.Remove(key); } public bool TryGetValue(TKey key, out TValue value) { return _dictionary.TryGetValue(key, out value); } #region ICollection > Members bool ICollection >.IsReadOnly { get { return ((ICollection >)_dictionary).IsReadOnly; } } void ICollection >.Add(KeyValuePair item) { Add(item.Key, item.Value); } bool ICollection >.Contains(KeyValuePair item) { return ((ICollection >)_dictionary).Contains(item); } void ICollection >.CopyTo(KeyValuePair [] array, int arrayIndex) { ((ICollection >)_dictionary).CopyTo(array, arrayIndex); } bool ICollection >.Remove(KeyValuePair item) { bool removed = ((ICollection >)_dictionary).Remove(item); // Only remove from lists if it was removed from the dictionary, since the dictionary may contain // the key but not the value. if (removed) { RemoveFromLists(item.Key); } return removed; } #endregion #region IEnumerable Members IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } #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
- EdmComplexTypeAttribute.cs
- DataGridCommandEventArgs.cs
- AdRotator.cs
- LinqDataSourceView.cs
- FaultConverter.cs
- NumericExpr.cs
- CompiledELinqQueryState.cs
- MouseButton.cs
- DispatcherObject.cs
- MouseActionConverter.cs
- RtfFormatStack.cs
- WsatRegistrationHeader.cs
- XPathNodePointer.cs
- PersonalizableTypeEntry.cs
- DecryptedHeader.cs
- HttpWebRequest.cs
- AspCompat.cs
- InkCanvasFeedbackAdorner.cs
- EncoderBestFitFallback.cs
- QueryExpr.cs
- UnicodeEncoding.cs
- SynchronizationContext.cs
- DesignerDataRelationship.cs
- RequestDescription.cs
- DataContractSerializerOperationFormatter.cs
- DataGridViewSortCompareEventArgs.cs
- CodeMemberMethod.cs
- ObjectList.cs
- ParameterBuilder.cs
- RightsManagementSuppressedStream.cs
- BreadCrumbTextConverter.cs
- FrameSecurityDescriptor.cs
- SpellerInterop.cs
- NotifyParentPropertyAttribute.cs
- XmlTypeAttribute.cs
- RichTextBoxAutomationPeer.cs
- HealthMonitoringSection.cs
- ClientCultureInfo.cs
- AssociationSetMetadata.cs
- WizardPanelChangingEventArgs.cs
- ProxyDataContractResolver.cs
- PostBackTrigger.cs
- XmlDocumentViewSchema.cs
- AmbientLight.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- XmlObjectSerializerReadContextComplexJson.cs
- ReadOnlyObservableCollection.cs
- TagElement.cs
- KnownColorTable.cs
- _ScatterGatherBuffers.cs
- BaseAsyncResult.cs
- HtmlSelect.cs
- DataGridViewCheckBoxColumn.cs
- Vector3D.cs
- GridItemCollection.cs
- PointConverter.cs
- HandlerElement.cs
- InternalPolicyElement.cs
- IPEndPointCollection.cs
- datacache.cs
- TimelineGroup.cs
- AngleUtil.cs
- CreateUserWizardAutoFormat.cs
- RuleSettings.cs
- ArrangedElementCollection.cs
- SerializerDescriptor.cs
- Win32MouseDevice.cs
- Repeater.cs
- CharacterString.cs
- AnnotationMap.cs
- _TimerThread.cs
- DataViewListener.cs
- ModelItemImpl.cs
- MatrixCamera.cs
- SqlDataSourceCache.cs
- DataListItemCollection.cs
- ProfileBuildProvider.cs
- SettingsAttributes.cs
- LinqDataSourceInsertEventArgs.cs
- CurrencyManager.cs
- SqlTrackingQuery.cs
- GrammarBuilderBase.cs
- Rect.cs
- EnvelopedPkcs7.cs
- ListSourceHelper.cs
- HostedTransportConfigurationBase.cs
- ListBindingConverter.cs
- TextRange.cs
- EpmSourceTree.cs
- UriWriter.cs
- OutputCacheModule.cs
- RegisteredHiddenField.cs
- SmiContextFactory.cs
- TextStore.cs
- AutomationIdentifierGuids.cs
- FrugalList.cs
- TransformConverter.cs
- DataService.cs
- NamedPipeAppDomainProtocolHandler.cs
- _CookieModule.cs