diff options
Diffstat (limited to 'src/mscorlib/shared/System/CharEnumerator.cs')
-rw-r--r-- | src/mscorlib/shared/System/CharEnumerator.cs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/mscorlib/shared/System/CharEnumerator.cs b/src/mscorlib/shared/System/CharEnumerator.cs new file mode 100644 index 0000000000..ea9915a7c4 --- /dev/null +++ b/src/mscorlib/shared/System/CharEnumerator.cs @@ -0,0 +1,80 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/*============================================================ +** +** +** +** Purpose: Enumerates the characters on a string. skips range +** checks. +** +** +============================================================*/ + +using System.Collections; +using System.Collections.Generic; + +namespace System +{ + public sealed class CharEnumerator : IEnumerator, IEnumerator<char>, IDisposable, ICloneable + { + private String _str; + private int _index; + private char _currentElement; + + internal CharEnumerator(String str) + { + _str = str; + _index = -1; + } + + public object Clone() + { + return MemberwiseClone(); + } + + public bool MoveNext() + { + if (_index < (_str.Length - 1)) + { + _index++; + _currentElement = _str[_index]; + return true; + } + else + _index = _str.Length; + return false; + } + + public void Dispose() + { + if (_str != null) + _index = _str.Length; + _str = null; + } + + Object IEnumerator.Current + { + get { return Current; } + } + + public char Current + { + get + { + if (_index == -1) + throw new InvalidOperationException(SR.InvalidOperation_EnumNotStarted); + if (_index >= _str.Length) + throw new InvalidOperationException(SR.InvalidOperation_EnumEnded); + return _currentElement; + } + } + + public void Reset() + { + _currentElement = (char)0; + _index = -1; + } + } +} |