コード例 #1
0
ファイル: Intersect.cs プロジェクト: kevin-montrose/LinqAF
        public bool MoveNext()
        {
            if (UniqueSecondItems.IsDefaultValue())
            {
                Container.Initialize();
                UniqueSecondItems.Initialize();
                while (SecondInner.MoveNext())
                {
                    UniqueSecondItems.Add(SecondInner.Current, ref Container);
                }

                AlreadyYielded.Initialize();
            }

            while (FirstInner.MoveNext())
            {
                var cur = FirstInner.Current;
                int existingValueIndex;
                if (UniqueSecondItems.Contains(cur, ref Container, out existingValueIndex))
                {
                    if (AlreadyYielded.AddByIndex(existingValueIndex, ref Container))
                    {
                        Current = cur;
                        return(true);
                    }
                }
            }

            return(false);
        }
コード例 #2
0
ファイル: Union.cs プロジェクト: kevin-montrose/LinqAF
        public bool MoveNext()
        {
            if (AlreadyYielded.IsDefaultValue())
            {
                AlreadyYielded.Initialize();
                Container.Initialize();
            }

            if (!FirstFinished)
            {
                while (FirstInner.MoveNext())
                {
                    var cur = FirstInner.Current;

                    if (AlreadyYielded.Add(cur, ref Container))
                    {
                        Current = cur;
                        return(true);
                    }
                }

                FirstFinished = true;
            }

            while (SecondInner.MoveNext())
            {
                var cur = SecondInner.Current;

                if (AlreadyYielded.Add(cur, ref Container))
                {
                    Current = cur;
                    return(true);
                }
            }

            return(false);
        }
コード例 #3
0
        public bool MoveNext()
        {
            if (AlreadyYielded.IsDefaultValue())
            {
                AlreadyYielded.Initialize();
                Container.Initialize();
                while (SecondInner.MoveNext())
                {
                    AlreadyYielded.Add(SecondInner.Current, ref Container, Comparer);
                }
            }

            while (FirstInner.MoveNext())
            {
                var cur = FirstInner.Current;
                if (AlreadyYielded.Add(cur, ref Container, Comparer))
                {
                    Current = cur;
                    return(true);
                }
            }

            return(false);
        }
コード例 #4
0
ファイル: Distinct.cs プロジェクト: kevin-montrose/LinqAF
        public bool MoveNext()
        {
            if (PreviouslyYielded.IsDefaultValue())
            {
                PreviouslyYielded.Initialize();
                Container.Initialize();
            }

            while (Inner.MoveNext())
            {
                var cur = Inner.Current;
                if (PreviouslyYielded.Add(cur, ref Container))
                {
                    Current = cur;
                    return(true);
                }
            }

            return(false);
        }