예제 #1
0
 public static Generic.IEnumerable <byte> Encode(this Generic.IEnumerable <char> me, Encoding encoding)
 {
     Generic.IEnumerator <byte> enumerator = me.GetEnumerator().Encode(encoding);
     while (enumerator.MoveNext())
     {
         yield return(enumerator.Current);
     }
 }
예제 #2
0
 public static string Join(this Generic.IEnumerable <string> me)
 {
     System.Text.StringBuilder    result     = new System.Text.StringBuilder();
     Generic.IEnumerator <string> enumerator = me.GetEnumerator();
     while (enumerator.MoveNext())
     {
         result.Append(enumerator.Current);
     }
     return(result.ToString());
 }
예제 #3
0
 public static Generic.IEnumerable <T> Read <T>(this Generic.IEnumerable <T> me, int count)
 {
     if (count > 0)
     {
         var enumerator = me.GetEnumerator();
         do
         {
             yield return(enumerator.Current);
         }while (--count > 0 && enumerator.MoveNext());
     }
 }
예제 #4
0
        public static Generic.IEnumerable <T> Skip <T>(this Generic.IEnumerable <T> me, int count)
        {
            var enumerator = me.GetEnumerator();

            while (count > 0 && enumerator.MoveNext())
            {
                count--;
            }
            while (enumerator.MoveNext())
            {
                yield return(enumerator.Current);
            }
        }
예제 #5
0
        public static T First <T>(this Generic.IEnumerable <T> me)
        {
            T result;

            if (me.NotNull())
            {
                using (Generic.IEnumerator <T> enumerator = me.GetEnumerator())
                    result = enumerator.MoveNext() ? enumerator.Current : default(T);
            }
            else
            {
                result = default(T);
            }
            return(result);
        }
예제 #6
0
        public static T?FirstOrNull <T>(this Generic.IEnumerable <T> me)
            where T : struct
        {
            T?result;

            if (me.NotNull())
            {
                using (Generic.IEnumerator <T> enumerator = me.GetEnumerator())
                    result = enumerator.MoveNext() ? enumerator.Current : default(T);
            }
            else
            {
                result = null;
            }
            return(result);
        }
예제 #7
0
        public static bool All <T>(this Generic.IEnumerable <T> me, Func <T, bool, bool> function)
        {
            bool result = true;

            Generic.IEnumerator <T> enumerator = me.GetEnumerator();
            bool notLast = enumerator.MoveNext();

            while (notLast)
            {
                T current = enumerator.Current;
                if (!function(current, !(notLast = enumerator.MoveNext())))
                {
                    result = false;
                    break;
                }
            }
            return(result);
        }
예제 #8
0
 public static Generic.IEnumerable <char> Decode(this Generic.IEnumerable <byte> me, System.Text.Encoding encoding)
 {
     //if (encoding == System.Text.Encoding.UTF8)
     {
         byte[] buffer = new byte[6];
         int    length = 0;
         Generic.IEnumerator <byte> enumerator = me.GetEnumerator();
         while (enumerator.MoveNext())
         {
             buffer[0] = enumerator.Current;
             length    =
                 buffer[0] < 0x80 ? 1 :
                 buffer[0] < 0xc0 ? 0 :
                 buffer[0] < 0xe0 ? 2 :
                 buffer[0] < 0xf0 ? 3 :
                 buffer[0] < 0xf8 ? 4 :
                 buffer[0] < 0xfc ? 5 :
                 6;
             if (length > 0)
             {
                 int i = 1;
                 for (; i < length && enumerator.MoveNext(); i++)
                 {
                     buffer[i] = enumerator.Current;
                 }
                 if (length == 3 && buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf)
                 {
                     length = 0;                             // Skip "zero width no break space" (0xefbbbf)
                     //yield return ;
                 }
                 if (i == length)
                 {
                     foreach (char c in encoding.GetChars(buffer, 0, length))
                     {
                         yield return(c);
                     }
                 }
             }
         }
     }
 }
예제 #9
0
        public static Generic.IEnumerable <T> Skip <T>(this Generic.IEnumerable <T> me, params T[] separator)
            where T : IEquatable <T>
        {
            int position   = 0;
            var enumerator = me.GetEnumerator();

            while (enumerator.MoveNext())
            {
                if (!separator[position++].Equals(enumerator.Current))
                {
                    position = 0;
                }
                else if (separator.Length == position)
                {
                    break;
                }
            }
            while (enumerator.MoveNext())
            {
                yield return(enumerator.Current);
            }
        }
예제 #10
0
 public static bool SameOrEquals <T>(this Generic.IEnumerable <T> me, Generic.IEnumerable <T> other) =>
 me.IsNull() && other.IsNull() || me.GetEnumerator().SameOrEquals(other.GetEnumerator());
예제 #11
0
 /// <summary>
 /// Copies data of <paramref>me</paramref> into a new array.
 /// </summary>
 /// <param name="me">Block to copy data from.</param>
 /// <returns>A new array containing the data from <paramref>me</paramref>.</returns>
 public static T[] ToArray <T>(this Generic.IEnumerable <T> me)
 {
     return(me.NotNull() ? me.GetEnumerator().ToArray(0) : null);
 }
예제 #12
0
 public static IAsyncEnumerator <T> Create <T>(Generic.IEnumerable <T> enumerable) => AsyncEnumerator.Create(enumerable?.GetEnumerator());
예제 #13
0
 public static Tasks.Task <bool> WriteLine(this ITextWriter me, Generic.IEnumerable <char> value)
 {
     return(me.WriteLine(value.GetEnumerator()));
 }
예제 #14
0
 public static Tasks.Task <bool> Write(this ITextWriter me, Generic.IEnumerable <char> buffer)
 {
     return(me.Write(buffer?.GetEnumerator()));
 }
예제 #15
0
 public static Tasks.Task <bool> Join(this ITextWriter me, Generic.IEnumerable <string> items, string separator = null)
 {
     return(me.Join(items?.GetEnumerator(), separator));
 }
예제 #16
0
 internal static ICharacterInDevice Open(Generic.IEnumerable <char> content)
 {
     return(CharacterInDevice.Open(content?.GetEnumerator()));
 }
예제 #17
0
파일: Equality.cs 프로젝트: Spaxys/Kean
 public void EnumeratorNotEqual(Generic.IEnumerable <string> left, Generic.IEnumerable <string> right)
 {
     Assert.False((left?.GetEnumerator()).SameOrEquals(right?.GetEnumerator()));
 }
예제 #18
0
파일: Equality.cs 프로젝트: Spaxys/Kean
 public void ArrayNotEqual(Generic.IEnumerable <string> left, Generic.IEnumerable <string> right)
 {
     Assert.NotEqual(left?.GetEnumerator().ToArray(), right?.GetEnumerator().ToArray());
 }
예제 #19
0
 public static int Hash <T>(this object me, Generic.IEnumerable <T> others)
 {
     return(me.Hash(others.GetEnumerator()));
 }
예제 #20
0
 public static T Get <T>(this Generic.IEnumerable <T> me, int index)
 {
     return(me.GetEnumerator().Skip(index).Next());
 }
예제 #21
0
 public static Generic.IEnumerable <TResult> Zip <TLeft, TRight, TResult>(this Generic.IEnumerable <TLeft> me, Generic.IEnumerable <TRight> other, Func <TLeft, TRight, TResult> combine)
 {
     return(me.NotNull() && other.NotNull() && combine.NotNull() ?
            new Enumerable <TResult>(() => me.GetEnumerator().Zip(other.GetEnumerator(), combine)) :
            Enumerable.Empty <TResult>());
 }
예제 #22
0
 public static int Count <T>(this Generic.IEnumerable <T> me)
 {
     return(me.NotNull() ? me.GetEnumerator().Count() : 0);
 }