コード例 #1
0
                public override bool TryAdvance(T_CONS consumer)
                {
                    Objects.RequireNonNull(consumer);

                    if (SplSpineIndex < LastSpineIndex || (SplSpineIndex == LastSpineIndex && SplElementIndex < LastSpineElementFence))
                    {
                        ArrayForOne(SplChunk, SplElementIndex++, consumer);

                        if (SplElementIndex == outerInstance.ArrayLength(SplChunk))
                        {
                            SplElementIndex = 0;
                            ++SplSpineIndex;
                            if (outerInstance.Spine != null && SplSpineIndex <= LastSpineIndex)
                            {
                                SplChunk = outerInstance.Spine[SplSpineIndex];
                            }
                        }
                        return(true);
                    }
                    return(false);
                }
コード例 #2
0
                public override void ForEachRemaining(T_CONS consumer)
                {
                    Objects.RequireNonNull(consumer);

                    if (SplSpineIndex < LastSpineIndex || (SplSpineIndex == LastSpineIndex && SplElementIndex < LastSpineElementFence))
                    {
                        int i = SplElementIndex;
                        // completed chunks, if any
                        for (int sp = SplSpineIndex; sp < LastSpineIndex; sp++)
                        {
                            T_ARR chunk = outerInstance.Spine[sp];
                            outerInstance.ArrayForEach(chunk, i, outerInstance.ArrayLength(chunk), consumer);
                            i = 0;
                        }
                        // last (or current uncompleted) chunk
                        T_ARR chunk = (SplSpineIndex == LastSpineIndex) ? SplChunk : outerInstance.Spine[LastSpineIndex];
                        outerInstance.ArrayForEach(chunk, i, LastSpineElementFence, consumer);
                        // mark consumed
                        SplSpineIndex   = LastSpineIndex;
                        SplElementIndex = LastSpineElementFence;
                    }
                }
コード例 #3
0
 internal abstract void ArrayForOne(T_ARR array, int index, T_CONS consumer);