The Labs \ Source Viewer \ SSCLI \ System.Configuration \ SettingsPropertyValueCollection

  1. //------------------------------------------------------------------------------
  2. // <copyright file="SettingsPropertyValueCollection.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.Configuration
  16. {
  17.     using System.Collections;
  18.     using System.Collections.Specialized;
  19.     using System.Runtime.Serialization;
  20.     using System.Configuration.Provider;
  21.     using System.Globalization;
  22.     using System.IO;
  23.     using System.Runtime.Serialization.Formatters.Binary;
  24.     using System.Xml.Serialization;
  25.     using System.ComponentModel;
  26.     using System.Security.Permissions;
  27.     using System.Reflection;
  28.    
  29.     //////////////////////////////////////////////////////////////////////////////////
  30.     //////////////////////////////////////////////////////////////////////////////////
  31.     public class SettingsPropertyValueCollection : IEnumerable, ICloneable, ICollection
  32.     {
  33.         private Hashtable _Indices = null;
  34.        
  35.         private ArrayList _Values = null;
  36.        
  37.         private bool _ReadOnly = false;
  38.        
  39.         ////////////////////////////////////////////////////////////
  40.         ////////////////////////////////////////////////////////////
  41.         public SettingsPropertyValueCollection()
  42.         {
  43.             _Indices = new Hashtable(10, CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);
  44.             _Values = new ArrayList();
  45.         }
  46.        
  47.         ////////////////////////////////////////////////////////////
  48.         ////////////////////////////////////////////////////////////
  49.         public void Add(SettingsPropertyValue property)
  50.         {
  51.             if (_ReadOnly)
  52.                 throw new NotSupportedException();
  53.            
  54.             int pos = _Values.Add(property);
  55.            
  56.             try {
  57.                 _Indices.Add(property.Name, pos);
  58.             }
  59.             catch (Exception) {
  60.                 _Values.RemoveAt(pos);
  61.                 throw;
  62.             }
  63.         }
  64.        
  65.         ////////////////////////////////////////////////////////////
  66.         ////////////////////////////////////////////////////////////
  67.         public void Remove(string name)
  68.         {
  69.             if (_ReadOnly)
  70.                 throw new NotSupportedException();
  71.            
  72.             object pos = _Indices[name];
  73.            
  74.             if (pos == null || !(pos is int))
  75.                 return;
  76.            
  77.             int ipos = (int)pos;
  78.            
  79.             if (ipos >= _Values.Count)
  80.                 return;
  81.            
  82.             _Values.RemoveAt(ipos);
  83.             _Indices.Remove(name);
  84.            
  85.             ArrayList al = new ArrayList();
  86.            
  87.             foreach (DictionaryEntry de in _Indices)
  88.                 if ((int)de.Value > ipos)
  89.                     al.Add(de.Key);
  90.            
  91.             foreach (string key in al)
  92.                 _Indices[key] = ((int)_Indices[key]) - 1;
  93.         }
  94.        
  95.         ////////////////////////////////////////////////////////////
  96.         ////////////////////////////////////////////////////////////
  97.         public SettingsPropertyValue this[string name]
  98.         {
  99.             get {
  100.                 object pos = _Indices[name];
  101.                
  102.                 if (pos == null || !(pos is int))
  103.                     return null;
  104.                
  105.                 int ipos = (int)pos;
  106.                
  107.                 if (ipos >= _Values.Count)
  108.                     return null;
  109.                
  110.                 return (SettingsPropertyValue)_Values[ipos];
  111.             }
  112.         }
  113.        
  114.         ////////////////////////////////////////////////////////////
  115.         ////////////////////////////////////////////////////////////
  116.         public IEnumerator GetEnumerator()
  117.         {
  118.             return _Values.GetEnumerator();
  119.         }
  120.        
  121.         ////////////////////////////////////////////////////////////
  122.         ////////////////////////////////////////////////////////////
  123.         public object Clone()
  124.         {
  125.             return new SettingsPropertyValueCollection(_Indices, _Values);
  126.         }
  127.        
  128.         ////////////////////////////////////////////////////////////
  129.         ////////////////////////////////////////////////////////////
  130.         public void SetReadOnly()
  131.         {
  132.             if (_ReadOnly)
  133.                 return;
  134.            
  135.             _ReadOnly = true;
  136.             _Values = ArrayList.ReadOnly(_Values);
  137.         }
  138.        
  139.         ////////////////////////////////////////////////////////////
  140.         ////////////////////////////////////////////////////////////
  141.         public void Clear()
  142.         {
  143.             _Values.Clear();
  144.             _Indices.Clear();
  145.         }
  146.        
  147.         ////////////////////////////////////////////////////////////
  148.         ////////////////////////////////////////////////////////////
  149.         // ICollection interface
  150.         public int Count {
  151.             get { return _Values.Count; }
  152.         }
  153.        
  154.         public bool IsSynchronized {
  155.             get { return false; }
  156.         }
  157.        
  158.         public object SyncRoot {
  159.             get { return this; }
  160.         }
  161.        
  162.         public void CopyTo(Array array, int index)
  163.         {
  164.             _Values.CopyTo(array, index);
  165.         }
  166.        
  167.         /////////////////////////////////////////////////////////////////////////////
  168.         /////////////////////////////////////////////////////////////////////////////
  169.         private SettingsPropertyValueCollection(Hashtable indices, ArrayList values)
  170.         {
  171.             _Indices = (Hashtable)indices.Clone();
  172.             _Values = (ArrayList)values.Clone();
  173.         }
  174.     }
  175. }

Developer Fusion