protected override bool MoveNextCore()
            {
                Ch.AssertValue(_currentCursor);
                while (!_currentCursor.MoveNext())
                {
                    // Mark the current cursor as finished.
                    _currentCursor.Dispose();
                    _currentCursor = null;
                    if (++_currentSourceIndex >= Sources.Length)
                    {
                        return(false);
                    }

                    var columnsNeeded = Schema.Where(col => IsColumnActive(col.Index));
                    _currentCursor   = Sources[_currentSourceIndex].GetRowCursor(columnsNeeded);
                    _currentIdGetter = _currentCursor.GetIdGetter();
                }

                return(true);
            }
Example #2
0
            public Cursor(IChannelProvider provider, PartitionedFileLoader parent, IMultiStreamSource files, IEnumerable <DataViewSchema.Column> columnsNeeded, Random rand)
                : base(provider)
            {
                Contracts.AssertValue(parent);
                Contracts.AssertValue(files);

                _parent        = parent;
                _columnsNeeded = columnsNeeded;

                _active    = Utils.BuildArray(Schema.Count, columnsNeeded);
                _subActive = _active.Take(SubColumnCount).ToArray();
                _colValues = new ReadOnlyMemory <char> [Schema.Count - SubColumnCount];

                _subActivecolumnsNeeded = Schema.Where(x => (_subActive?.Length > x.Index) && _subActive[x.Index]);

                _subGetters = new Delegate[SubColumnCount];
                _getters    = CreateGetters();

                _fileOrder = CreateFileOrder(rand).GetEnumerator();
            }