Esempio n. 1
0
 public static void GenerateN <T>(OutputIterator <T> begin, int count, Functional.GenFunction <T> func)
 {
     for (begin = IteratorUtil.Clone(begin); count > 0; --count, begin.MoveNext())
     {
         begin.Write(func());
     }
 }
Esempio n. 2
0
 public static OutputIterator <T> FillN <T>(OutputIterator <T> begin, int count, T value)
 {
     for (begin = IteratorUtil.Clone(begin); count > 0; --count, begin.MoveNext())
     {
         begin.Write(value);
     }
     return(begin);
 }
Esempio n. 3
0
 public static void CopyN <T>(InputIterator <T> begin, uint count, OutputIterator <T> target)
 {
     for (begin = IteratorUtil.Clone(begin), target = IteratorUtil.Clone(target); count > 0; --count)
     {
         target.Write(begin.Read());
         begin.MoveNext();
         target.MoveNext();
     }
 }
Esempio n. 4
0
 public static OutputIterator <T> Copy <T>(IEnumerable <T> enumerable, OutputIterator <T> target)
 {
     target = IteratorUtil.Clone(target);
     foreach (T t  in enumerable)
     {
         target.Write(t);
         target.MoveNext();
     }
     return(target);
 }
Esempio n. 5
0
        [Test] public void UniqueCopy_List_OutputIterator()
        {
            OutputIterator <int> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();
            OutputIterator <int> result = Algorithm.UniqueCopy(src, destIter);

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, (result as ListIterator <int>).Position);
            Assert.AreEqual(Int32.MinValue, (result as ListIterator <int>).Read());
        }
Esempio n. 6
0
        [Test] public void UniqueCopy_Predicate_OutputIterator()
        {
            OutputIterator <int> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();
            OutputIterator <int> result = Algorithm.UniqueCopy(IteratorUtil.Begin(src), IteratorUtil.End(src), destIter, delegate(int lhs, int rhs) { return(lhs == rhs); });

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, (result as ListIterator <int>).Position);
            Assert.AreEqual(Int32.MinValue, (result as ListIterator <int>).Read());
        }
Esempio n. 7
0
        [Test] public void RemoveCopy_List_OutputIterator_Comparer()
        {
            OutputIterator <int> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

            OutputIterator <int> result = Algorithm.RemoveCopy(src, destIter, 29, EqualityComparer <int> .Default);

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(src.Length - 3, (result as ListIterator <int>).Position);
        }
Esempio n. 8
0
 public static OutputIterator <O> Transform <I, O>(InputIterator <I> begin1, InputIterator <I> end1, InputIterator <I> begin2,
                                                   OutputIterator <O> dest, Functional.BinaryFunction <I, I, O> func)
 {
     begin1 = IteratorUtil.Clone(begin1);
     begin2 = IteratorUtil.Clone(begin2);
     dest   = IteratorUtil.Clone(dest);
     for (; !begin1.Equals(end1); begin1.MoveNext(), begin2.MoveNext(), dest.MoveNext())
     {
         dest.Write(func(begin1.Read(), begin2.Read()));
     }
     return(dest);
 }
Esempio n. 9
0
        [Test] public void RemoveCopyIf_OutputIterator()
        {
            OutputIterator <int> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

            OutputIterator <int> result = Algorithm.RemoveCopyIf(IteratorUtil.Begin(src), IteratorUtil.End(src), destIter, Is29);

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(src.Length - 3, (result as ListIterator <int>).Position);
        }
Esempio n. 10
0
        [Test] public void UniqueCopy_OutputIterator()
        {
            OutputIterator <string> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();
            OutputIterator <string> result = Algorithm.UniqueCopy(IteratorUtil.Begin(src), IteratorUtil.End(src), destIter);

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, (result as ListIterator <string>).Position);
            Assert.AreEqual(MARKER, (result as ListIterator <string>).Read());
        }
Esempio n. 11
0
        [Test] public void UniqueCopy_Predicate_OutputIterator()
        {
            OutputIterator <string> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();
            OutputIterator <string> result = Algorithm.UniqueCopy(IteratorUtil.Begin(src), IteratorUtil.End(src), destIter, delegate(string lhs, string rhs) { return(lhs == rhs); });

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, (result as ListIterator <string>).Position);
            Assert.AreEqual(MARKER, (result as ListIterator <string>).Read());
        }
Esempio n. 12
0
        public static void CopyN <T>(IEnumerable <T> enumerable, uint count, OutputIterator <T> target)
        {
            if (count == 0)
            {
                return;
            }

            target = IteratorUtil.Clone(target);
            foreach (T t  in enumerable)
            {
                target.Write(t);
                target.MoveNext();
                --count;
                if (count == 0)
                {
                    return;
                }
            }
        }
Esempio n. 13
0
        [Test] public void FillN_Iterator()
        {
            int[] array = new int[10];
            ListIterator <int> begin = IteratorUtil.Begin(array);
            ListIterator <int> end   = IteratorUtil.End(array);

            begin.MoveNext();
            end.MovePrev();

            OutputIterator <int> result = Algorithm.FillN(begin, 8, 42);

            Assert.AreEqual(0, array[0]);
            Assert.AreEqual(0, array[array.Length - 1]);
            for (int i = 1; i < array.Length - 1; ++i)
            {
                Assert.AreEqual(42, array[i]);
            }
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(typeof(ListIterator <int>), result);
            Assert.AreEqual(9, (result as ListIterator <int>).Position);
        }
Esempio n. 14
0
        public static void RotateCopy <T>(ForwardIterator <T> begin, ForwardIterator <T> middle,
                                          ForwardIterator <T> end, OutputIterator <T> dest)
        {
            Copy(begin, middle, Copy(middle, end, dest));

#if NEVER
            dest = IteratorUtil.Clone(dest);
            ForwardIterator <T> src = IteratorUtil.Clone(newBegin);
            newBegin = IteratorUtil.Clone(newBegin);

            for (; !src.Equals(end); dest.MoveNext(), src.MoveNext())
            {
                dest.Write(src.Read());
            }

            src = IteratorUtil.Clone(begin);
            for (; !src.Equals(newBegin); dest.MoveNext(), src.MoveNext())
            {
                dest.Write(src.Read());
            }
#endif
        }
Esempio n. 15
0
        public static OutputIterator <T> UniqueCopy <T>(InputIterator <T> begin, InputIterator <T> end, OutputIterator <T> dest, Functional.BinaryPredicate <T> func)
        {
            if (begin.Equals(end))
            {
                return(null);
            }

            begin = IteratorUtil.Clone(begin);
            dest  = IteratorUtil.Clone(dest);
            T t = begin.Read();

            dest.Write(t);
            dest.MoveNext();
            begin.MoveNext();
            for (; !begin.Equals(end); begin.MoveNext())
            {
                T next = begin.Read();

                if (!func(t, next))
                {
                    t = next;
                    dest.Write(next);
                    dest.MoveNext();
                }
            }
            return(dest);
        }
Esempio n. 16
0
        public static OutputIterator <T> UniqueCopy <T>(InputIterator <T> begin, InputIterator <T> end, OutputIterator <T> dest, IEqualityComparer <T> comparer)
        {
            if (begin.Equals(end))
            {
                return(null);
            }

            begin = IteratorUtil.Clone(begin);
            dest  = IteratorUtil.Clone(dest);

            T t = begin.Read();

            dest.Write(t);
            dest.MoveNext();
            begin.MoveNext();
            for (; !begin.Equals(end); begin.MoveNext())
            {
                T next = begin.Read();
                if (!comparer.Equals(t, next))
                {
                    t = next;
                    dest.Write(next);
                    dest.MoveNext();
                }
            }
            return(dest);
        }
Esempio n. 17
0
 public static OutputIterator <T> UniqueCopy <T>(IList <T> source, OutputIterator <T> dest, Functional.BinaryPredicate <T> func)
 {
     return(UniqueCopy(IteratorUtil.Begin(source), IteratorUtil.End(source), dest, func));
 }
Esempio n. 18
0
 public static OutputIterator <T> UniqueCopy <T>(IList <T> source, OutputIterator <T> dest, IEqualityComparer <T> comparer)
 {
     return(UniqueCopy(IteratorUtil.Begin(source), IteratorUtil.End(source), dest, comparer));
 }
Esempio n. 19
0
 public static OutputIterator <T> Copy <T>(InputIterator <T> begin, InputIterator <T> end, OutputIterator <T> target)
 {
     for (begin = IteratorUtil.Clone(begin), target = IteratorUtil.Clone(target);
          !begin.Equals(end);
          begin.MoveNext(), target.MoveNext())
     {
         target.Write(begin.Read());
     }
     return(target);
 }
Esempio n. 20
0
 public static OutputIterator <T> RemoveCopy <T>(InputIterator <T> begin, InputIterator <T> end, OutputIterator <T> dest, T value, IEqualityComparer <T> comparer)
 {
     for (begin = IteratorUtil.Clone(begin), dest = IteratorUtil.Clone(dest); !begin.Equals(end); begin.MoveNext())
     {
         T t = begin.Read();
         if (!comparer.Equals(value, t))
         {
             dest.Write(t);
             dest.MoveNext();
         }
     }
     return(dest);
 }
Esempio n. 21
0
 public static void ReplaceCopy <T>(InputIterator <T> begin, InputIterator <T> end, OutputIterator <T> dest, T oldValue, T newValue, IEqualityComparer <T> comparer)
 {
     for (begin = IteratorUtil.Clone(begin), dest = IteratorUtil.Clone(dest); !begin.Equals(end); begin.MoveNext(), dest.MoveNext())
     {
         T srcValue = begin.Read();
         if (comparer.Equals(oldValue, srcValue))
         {
             dest.Write(newValue);
         }
         else
         {
             dest.Write(srcValue);
         }
     }
 }
Esempio n. 22
0
 /// <summary>
 /// Reverses elements from a source enumerable to an output iterator in reverse order
 /// </summary>
 /// <remarks>
 /// Because .NET does not allow use to traverse an enumerator in reverse, we have to create a complete, temporary
 /// copy of the input collection. This is terribly inefficient. Beware when using this routine with large collections.
 /// </remarks>
 /// <typeparam name="T"></typeparam>
 /// <param name="enumerable"></param>
 /// <param name="target"></param>
 public static void ReverseCopy <T>(IEnumerable <T> enumerable, OutputIterator <T> target)
 {
     ReverseCopy(new List <T>(enumerable), target);
 }
Esempio n. 23
0
 public static void ReverseCopy <T>(IList <T> source, OutputIterator <T> target)
 {
     ReverseCopy(IteratorUtil.Begin(source), IteratorUtil.End(source), target);
 }
Esempio n. 24
0
 public static OutputIterator <T> RemoveCopy <T>(IList <T> source, OutputIterator <T> dest, T value, IEqualityComparer <T> comparer)
 {
     return(RemoveCopy(IteratorUtil.Begin(source), IteratorUtil.End(source), dest, value, comparer));
 }
Esempio n. 25
0
 public static OutputIterator <T> RemoveCopy <T>(InputIterator <T> begin, InputIterator <T> end, OutputIterator <T> dest, T value)
     where T : IEquatable <T>
 {
     for (begin = IteratorUtil.Clone(begin), dest = IteratorUtil.Clone(dest); !begin.Equals(end); begin.MoveNext())
     {
         T t = begin.Read();
         if (!value.Equals(t))
         {
             dest.Write(t);
             dest.MoveNext();
         }
     }
     return(dest);
 }
Esempio n. 26
0
 public static void ReplaceCopy <T>(IList <T> list, OutputIterator <T> dest, T oldValue, T newValue, IEqualityComparer <T> comparer)
     where T : IEquatable <T>
 {
     ReplaceCopy(IteratorUtil.Begin(list), IteratorUtil.End(list), dest, oldValue, newValue, comparer);
 }
Esempio n. 27
0
 public static OutputIterator <T> RemoveCopy <T>(IList <T> source, OutputIterator <T> dest, T value)
     where T : IEquatable <T>
 {
     return(RemoveCopy(IteratorUtil.Begin(source), IteratorUtil.End(source), dest, value));
 }
Esempio n. 28
0
 public static OutputIterator <T> UniqueCopy <T>(IList <T> source, OutputIterator <T> dest)
     where T : IEquatable <T>
 {
     return(UniqueCopy(IteratorUtil.Begin(source), IteratorUtil.End(source), dest));
 }
Esempio n. 29
0
 public static void ReplaceCopy <T>(InputIterator <T> begin, InputIterator <T> end, OutputIterator <T> dest, T oldValue, T newValue)
     where T : IEquatable <T>
 {
     ReplaceCopy(begin, end, dest, oldValue, newValue, EqualityComparer <T> .Default);
 }
Esempio n. 30
0
 public static OutputIterator <T> UniqueCopy <T>(InputIterator <T> begin, InputIterator <T> end, OutputIterator <T> dest)
     where T : IEquatable <T>
 {
     return(UniqueCopy(begin, end, dest, EqualityComparer <T> .Default));
 }