コード例 #1
0
ファイル: Algorithm.MinElement.cs プロジェクト: ggeurts/nhive
        public static ForwardIterator <T> MinElement <T>(ForwardIterator <T> begin, ForwardIterator <T> end)
            where T : IComparable <T>
        {
            if (begin.Equals(end))
            {
                return(null);
            }

            begin = IteratorUtil.Clone(begin);
            ForwardIterator <T> minIter = IteratorUtil.Clone(begin);
            T min = minIter.Read();

            begin.MoveNext();
            for (; !begin.Equals(end); begin.MoveNext())
            {
                T temp = begin.Read();
                if (object.ReferenceEquals(temp, null))
                {
                    continue;
                }

                int compare = temp.CompareTo(min);
                if (compare == -1)
                {
                    min     = temp;
                    minIter = IteratorUtil.Clone(begin);
                }
            }

            return(minIter);
        }
コード例 #2
0
ファイル: Algorithm.MinElement.cs プロジェクト: ggeurts/nhive
        public static ForwardIterator <T> MinElement <T>(ForwardIterator <T> begin, ForwardIterator <T> end, Functional.BinaryPredicate <T> func)
        {
            if (begin.Equals(end))
            {
                return(null);
            }

            begin = IteratorUtil.Clone(begin);
            ForwardIterator <T> minIter = IteratorUtil.Clone(begin);
            T min = minIter.Read();

            begin.MoveNext();
            for (; !begin.Equals(end); begin.MoveNext())
            {
                T    temp = begin.Read();
                bool less = func(temp, min);
                if (less)
                {
                    min     = temp;
                    minIter = IteratorUtil.Clone(begin);
                }
            }

            return(minIter);
        }
コード例 #3
0
        public static ForwardIterator <T> Search <T>(ForwardIterator <T> begin, ForwardIterator <T> end,
                                                     ForwardIterator <T> searchBegin, ForwardIterator <T> searchEnd,
                                                     Functional.BinaryPredicate <T> func)
        {
            if (begin.Equals(end))
            {
                return(null);
            }

            if (searchBegin.Equals(searchEnd))
            {
                return(null);
            }

            begin       = IteratorUtil.Clone(begin);
            searchBegin = IteratorUtil.Clone(searchBegin);
            T firstSearchElement = searchBegin.Read();

            if (IteratorUtil.IsOneElementRange(searchBegin, searchEnd))
            {
                return(FindIf(begin, end, Functional.Bind2ndPred(func, firstSearchElement)));
            }

            while (!begin.Equals(end))
            {
                begin = FindIf(begin, end, Functional.Bind2ndPred(func, firstSearchElement));
                if (begin == null)
                {
                    return(null);
                }

                ForwardIterator <T> iter = IteratorUtil.Clone(begin);
                iter.MoveNext();
                if (iter.Equals(end))
                {
                    return(null);
                }

                ForwardIterator <T> searchIter = IteratorUtil.Clone(searchBegin);
                searchIter.MoveNext();

                while (func(iter.Read(), searchIter.Read()))
                {
                    searchIter.MoveNext();
                    if (searchIter.Equals(searchEnd))
                    {
                        return(begin);
                    }

                    iter.MoveNext();
                    if (iter.Equals(end))
                    {
                        return(null);
                    }
                }

                begin.MoveNext();
            }
            return(null);
        }
コード例 #4
0
ファイル: IteratorUtil.Swap.cs プロジェクト: ggeurts/nhive
        public static void Swap <T>(ForwardIterator <T> lhs, ForwardIterator <T> rhs)
        {
            T temp = lhs.Read();

            lhs.Write(rhs.Read());
            rhs.Write(temp);
        }
コード例 #5
0
ファイル: Algorithm.MaxElement.cs プロジェクト: ggeurts/nhive
        public static ForwardIterator <T> MaxElement <T>(ForwardIterator <T> begin, ForwardIterator <T> end, Functional.BinaryPredicate <T> func)
        {
            if (begin.Equals(end))
            {
                return(null);
            }

            begin = IteratorUtil.Clone(begin);
            ForwardIterator <T> maxIter = IteratorUtil.Clone(begin);
            T max = maxIter.Read();

            begin.MoveNext();
            for (; !begin.Equals(end); begin.MoveNext())
            {
                T    temp = begin.Read();
                bool more = func(temp, max);
                if (more)
                {
                    max     = temp;
                    maxIter = IteratorUtil.Clone(begin);
                }
            }

            return(maxIter);
        }
コード例 #6
0
ファイル: SearchNTest.cs プロジェクト: ggeurts/nhive
        [Test] public void SearchN_Iterator()
        {
            int[] array = Constants.TEST_BIG_INT_ARRAY;
            ForwardIterator <int> result = Algorithm.SearchN(IteratorUtil.Begin(array), IteratorUtil.End(array), 3, 1);

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(typeof(ListIterator <int>), result);
            Assert.AreEqual(5, IteratorUtil.Distance(IteratorUtil.Begin(array), result));
            Assert.AreEqual(array[5], result.Read());
        }
コード例 #7
0
        [Test] public void AdjacentFind_ForwardIterator()
        {
            int[] array = Constants.TEST_INT_ARRAY;

            ForwardIterator <int> begin = IteratorUtil.Begin(array);
            ForwardIterator <int> end   = IteratorUtil.End(array);
            ForwardIterator <int> iter  = Algorithm.AdjacentFind(begin, end);

            Assert.AreEqual(6, IteratorUtil.Distance(begin, iter));
            Assert.AreEqual(array[6], iter.Read());

            iter = Algorithm.AdjacentFind(IteratorUtil.Begin(array), IteratorUtil.End(array), EqualityComparer <int> .Default);
            Assert.AreEqual(6, IteratorUtil.Distance(begin, iter));
            Assert.AreEqual(array[6], iter.Read());

            iter = Algorithm.AdjacentFind(IteratorUtil.Begin(array), IteratorUtil.End(array), AreEqual);
            Assert.AreEqual(6, IteratorUtil.Distance(begin, iter));
            Assert.AreEqual(array[6], iter.Read());
        }
コード例 #8
0
ファイル: FindFirstOf.cs プロジェクト: ggeurts/nhive
        [Test] public void FindFirstOf_Iterator()
        {
            ForwardIterator <int> result = Algorithm.FindFirstOf(IteratorUtil.Begin(array), IteratorUtil.End(array),
                                                                 IteratorUtil.Begin(search), IteratorUtil.End(search));

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(typeof(ListIterator <int>), result);
            Assert.AreEqual(5, IteratorUtil.Distance(IteratorUtil.Begin(array), result));
            Assert.AreEqual(33, result.Read());
        }
コード例 #9
0
ファイル: Algorithm.Replace.cs プロジェクト: ggeurts/nhive
 public static void Replace <T>(ForwardIterator <T> begin, ForwardIterator <T> end, T oldValue, T newValue, IEqualityComparer <T> comparer)
 {
     for (begin = IteratorUtil.Clone(begin); !begin.Equals(end); begin.MoveNext())
     {
         if (comparer.Equals(oldValue, begin.Read()))
         {
             begin.Write(newValue);
         }
     }
 }
コード例 #10
0
ファイル: FindEndTest.cs プロジェクト: ggeurts/nhive
        [Test] public void FindEnd_Predicate()
        {
            ForwardIterator <int> result = Algorithm.FindEnd(IteratorUtil.Begin(array), IteratorUtil.End(array),
                                                             IteratorUtil.Begin(search), IteratorUtil.End(search),
                                                             Functional.EqualTo <int>);

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(typeof(ListIterator <int>), result);
            Assert.AreEqual(array.Length - 9, IteratorUtil.Distance(IteratorUtil.Begin(array), result));
            Assert.AreEqual(5, result.Read());
        }
コード例 #11
0
ファイル: Algorithm.Replace.cs プロジェクト: ggeurts/nhive
 public static void Replace <T>(ForwardIterator <T> begin, ForwardIterator <T> end, T oldValue, T newValue)
     where T : IEquatable <T>
 {
     for (begin = IteratorUtil.Clone(begin); !begin.Equals(end); begin.MoveNext())
     {
         if (oldValue.Equals(begin.Read()))
         {
             begin.Write(newValue);
         }
     }
 }
コード例 #12
0
 public static void ReplaceIf <T>(ForwardIterator <T> begin, ForwardIterator <T> end, T newValue, Functional.UnaryPredicate <T> func)
     where T : IEquatable <T>
 {
     for (begin = IteratorUtil.Clone(begin); !begin.Equals(end); begin.MoveNext())
     {
         if (func(begin.Read()))
         {
             begin.Write(newValue);
         }
     }
 }
コード例 #13
0
ファイル: FindEndTest.cs プロジェクト: ggeurts/nhive
        [Test] public void FindEnd_Comparer()
        {
            ForwardIterator <int> result = Algorithm.FindEnd(IteratorUtil.Begin(array), IteratorUtil.End(array),
                                                             IteratorUtil.Begin(search), IteratorUtil.End(search),
                                                             EqualityComparer <int> .Default);

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(typeof(ListIterator <int>), result);
            Assert.AreEqual(array.Length - 9, IteratorUtil.Distance(IteratorUtil.Begin(array), result));
            Assert.AreEqual(5, result.Read());
        }
コード例 #14
0
        [Test] public void UniqueCopy_Comparer_ForwardIterator()
        {
            ForwardIterator <string> destIter = IteratorUtil.Begin(dest);

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

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, IteratorUtil.Distance(IteratorUtil.Begin(dest), result));
            Assert.AreEqual(MARKER, result.Read());
        }
コード例 #15
0
        [Test] public void UniqueCopy_Predicate_ForwardIterator()
        {
            ForwardIterator <string> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();
            ForwardIterator <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, IteratorUtil.Distance(IteratorUtil.Begin(dest), result));
            Assert.AreEqual(MARKER, result.Read());
        }
コード例 #16
0
ファイル: UniqueCopyTest_Int.cs プロジェクト: ggeurts/nhive
        [Test] public void UniqueCopy_ForwardIterator()
        {
            ForwardIterator <int> destIter = IteratorUtil.Begin(dest);

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

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, IteratorUtil.Distance(IteratorUtil.Begin(dest), result));
            Assert.AreEqual(Int32.MinValue, result.Read());
        }
コード例 #17
0
ファイル: Algorithm.RotateCopy.cs プロジェクト: ggeurts/nhive
        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
        }
コード例 #18
0
        [Test] public void RemoveCopyIf_ForwardIterator()
        {
            ForwardIterator <int> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

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

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(src.Length - 3, IteratorUtil.Distance(IteratorUtil.Begin(dest), result));
            Assert.AreEqual(Int32.MinValue, result.Read());
        }
コード例 #19
0
        [Test] public void RemoveCopy_List_ForwardIterator_Comparer()
        {
            ForwardIterator <int> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

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

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(src.Length - 3, IteratorUtil.Distance(IteratorUtil.Begin(dest), result));
            Assert.AreEqual(Int32.MinValue, result.Read());
        }
コード例 #20
0
ファイル: Algorithm.SearchN.cs プロジェクト: ggeurts/nhive
        public static ForwardIterator <T> SearchN <T>(ForwardIterator <T> begin, ForwardIterator <T> end,
                                                      int count, Functional.UnaryPredicate <T> func)
        {
            if (begin.Equals(end) || (count <= 0))
            {
                return(null);
            }

            if (count == 1)
            {
                return(FindIf(begin, end, func));
            }

            begin = IteratorUtil.Clone(begin);
            while (!begin.Equals(end))
            {
                begin = FindIf(begin, end, func);
                if (begin == null)
                {
                    return(null);
                }

                ForwardIterator <T> iter = IteratorUtil.Clone(begin);
                iter.MoveNext();
                if (iter.Equals(end))
                {
                    return(null);
                }

                int matchCount = count - 1;
                while (func(iter.Read()))
                {
                    --matchCount;
                    if (matchCount == 0)
                    {
                        return(begin);
                    }

                    iter.MoveNext();
                    if (iter.Equals(end))
                    {
                        return(null);
                    }
                }

                begin.MoveNext();
            }
            return(null);
        }
コード例 #21
0
ファイル: Algorithm.SearchN.cs プロジェクト: ggeurts/nhive
        public static ForwardIterator <T> SearchN <T>(ForwardIterator <T> begin, ForwardIterator <T> end,
                                                      int count, T value, IEqualityComparer <T> comparer)
        {
            if (begin.Equals(end) || (count <= 0))
            {
                return(null);
            }

            if (count == 1)
            {
                return(Find(begin, end, value, comparer));
            }

            begin = IteratorUtil.Clone(begin);
            while (!begin.Equals(end))
            {
                begin = Find(begin, end, value, comparer);
                if (begin == null)
                {
                    return(null);
                }

                ForwardIterator <T> iter = IteratorUtil.Clone(begin);
                iter.MoveNext();
                if (iter.Equals(end))
                {
                    return(null);
                }

                int matchCount = count - 1;
                while (comparer.Equals(iter.Read(), value))
                {
                    --matchCount;
                    if (matchCount == 0)
                    {
                        return(begin);
                    }

                    iter.MoveNext();
                    if (iter.Equals(end))
                    {
                        return(null);
                    }
                }

                begin.MoveNext();
            }
            return(null);
        }
コード例 #22
0
        [Test] public void Search_Iterator()
        {
            int[] array  = Constants.TEST_INT_ARRAY;
            int[] search = new int[3];

            Algorithm.CopyN(array, 5, 3, search, 0);

            ForwardIterator <int> result = Algorithm.Search(IteratorUtil.Begin(array), IteratorUtil.End(array),
                                                            IteratorUtil.Begin(search), IteratorUtil.End(search));

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(typeof(ListIterator <int>), result);
            Assert.AreEqual(5, IteratorUtil.Distance(IteratorUtil.Begin(array), result));
            Assert.AreEqual(array[5], result.Read());
        }
コード例 #23
0
 public static ForwardIterator <T> FindFirstOf <T>(ForwardIterator <T> begin, ForwardIterator <T> end,
                                                   ForwardIterator <T> searchBegin, ForwardIterator <T> searchEnd,
                                                   Functional.BinaryPredicate <T> func)
 {
     begin = IteratorUtil.Clone(begin);
     for (; !begin.Equals(end); begin.MoveNext())
     {
         for (ForwardIterator <T> searchIter = IteratorUtil.Clone(searchBegin);
              !searchIter.Equals(searchEnd); searchIter.MoveNext())
         {
             if (func(begin.Read(), searchIter.Read()))
             {
                 return(begin);
             }
         }
     }
     return(null);
 }
コード例 #24
0
 public static ForwardIterator <T> FindFirstOf <T>(ForwardIterator <T> begin, ForwardIterator <T> end,
                                                   ForwardIterator <T> searchBegin, ForwardIterator <T> searchEnd,
                                                   IEqualityComparer <T> comparer)
 {
     begin = IteratorUtil.Clone(begin);
     for (; !begin.Equals(end); begin.MoveNext())
     {
         for (ForwardIterator <T> searchIter = IteratorUtil.Clone(searchBegin);
              !searchIter.Equals(searchEnd); searchIter.MoveNext())
         {
             if (comparer.Equals(begin.Read(), searchIter.Read()))
             {
                 return(begin);
             }
         }
     }
     return(null);
 }
コード例 #25
0
        public static ForwardIterator <T> Search <T>(ForwardIterator <T> begin, ForwardIterator <T> end,
                                                     ForwardIterator <T> searchBegin, ForwardIterator <T> searchEnd)
            where T : IEquatable <T>
        {
            return(Search(begin, end, searchBegin, searchEnd, EqualityComparer <T> .Default));

#if NEVER
            if (begin.Equals(end))
            {
                return(null);
            }

            if (searchBegin.Equals(searchEnd))
            {
                return(null);
            }

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

            if (IteratorUtil.IsOneElementRange(searchBegin, searchEnd))
            {
                return(Find(begin, end, searchBegin.Read()));
            }

            T firstSearchElement = searchBegin.Read();
            while (!begin.Equals(end))
            {
                begin = Find(begin, end, firstSearchElement);
                if (begin == null)
                {
                    return(null);
                }

                ForwardIterator <T> iter = IteratorUtil.Clone(begin);
                iter.MoveNext();
                if (iter.Equals(end))
                {
                    return(null);
                }

                ForwardIterator <T> searchIter = IteratorUtil.Clone(searchBegin);
                searchIter.MoveNext();

                while (iter.Read().Equals(searchIter.Read()))
                {
                    searchIter.MoveNext();
                    if (searchIter.Equals(searchEnd))
                    {
                        return(begin);
                    }

                    iter.MoveNext();
                    if (iter.Equals(end))
                    {
                        return(null);
                    }
                }

                begin.MoveNext();
            }
            return(null);
#endif
        }
コード例 #26
0
        public static ForwardIterator <T> Search <T>(ForwardIterator <T> begin, ForwardIterator <T> end,
                                                     ForwardIterator <T> searchBegin, ForwardIterator <T> searchEnd,
                                                     IEqualityComparer <T> comparer)
        {
            if (begin.Equals(end))
            {
                return(null);
            }

            if (searchBegin.Equals(searchEnd))
            {
                return(null);
            }

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

            if (IteratorUtil.IsOneElementRange(searchBegin, searchEnd))
            {
                return(Find(begin, end, searchBegin.Read(), comparer));
            }

            T firstSearchElement = searchBegin.Read();

            while (!begin.Equals(end))
            {
                begin = Find(begin, end, firstSearchElement, comparer);
                if (begin == null)
                {
                    return(null);
                }

                ForwardIterator <T> iter = IteratorUtil.Clone(begin);
                iter.MoveNext();
                if (iter.Equals(end))
                {
                    return(null);
                }

                ForwardIterator <T> searchIter = IteratorUtil.Clone(searchBegin);
                searchIter.MoveNext();

                while (comparer.Equals(iter.Read(), searchIter.Read()))
                {
                    searchIter.MoveNext();
                    if (searchIter.Equals(searchEnd))
                    {
                        return(begin);
                    }

                    iter.MoveNext();
                    if (iter.Equals(end))
                    {
                        return(null);
                    }
                }

                begin.MoveNext();
            }
            return(null);
        }