The Labs \ Source Viewer \ SSCLI \ System \ CharEnumerator

  1. // ==++==
  2. //
  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. //
  14. // ==--==
  15. /*============================================================
  16. **
  17. ** Class: CharEnumerator
  18. **
  19. **
  20. ** Purpose: Enumerates the characters on a string.  skips range
  21. **          checks.
  22. **
  23. **
  24. ============================================================*/
  25. namespace System
  26. {
  27.    
  28.     using System.Collections;
  29.     using System.Collections.Generic;
  30.    
  31.     [System.Runtime.InteropServices.ComVisible(true)]
  32.     [Serializable()]
  33.     public sealed class CharEnumerator : IEnumerator, ICloneable, IEnumerator<char>
  34.     {
  35.         private string str;
  36.         private int index;
  37.         private char currentElement;
  38.        
  39.         internal CharEnumerator(string str)
  40.         {
  41.             this.str = str;
  42.             this.index = -1;
  43.         }
  44.        
  45.         public object Clone()
  46.         {
  47.             return MemberwiseClone();
  48.         }
  49.        
  50.         public bool MoveNext()
  51.         {
  52.             if (index < (str.Length - 1)) {
  53.                 index++;
  54.                 currentElement = str[index];
  55.                 return true;
  56.             }
  57.             else
  58.                 index = str.Length;
  59.             return false;
  60.            
  61.         }
  62.        
  63.         void IDisposable.Dispose()
  64.         {
  65.         }
  66.        
  67.         /// <internalonly/>
  68.         object IEnumerator.Current {
  69.             get {
  70.                 if (index == -1)
  71.                     throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumNotStarted));
  72.                 if (index >= str.Length)
  73.                     throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumEnded));
  74.                
  75.                 return currentElement;
  76.             }
  77.         }
  78.        
  79.         public char Current {
  80.             get {
  81.                 if (index == -1)
  82.                     throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumNotStarted));
  83.                 if (index >= str.Length)
  84.                     throw new InvalidOperationException(Environment.GetResourceString(ResId.InvalidOperation_EnumEnded));
  85.                 return currentElement;
  86.             }
  87.         }
  88.        
  89.         public void Reset()
  90.         {
  91.             currentElement = (char)0;
  92.             index = -1;
  93.         }
  94.     }
  95. }

Developer Fusion