public Cursor(StatefulFilterTransform <TSrc, TDst, TState> parent, IRowCursor <TSrc> input, Func <int, bool> predicate)
                : base(parent.Host)
            {
                Ch.AssertValue(input);
                Ch.AssertValue(predicate);

                _parent = parent;
                _input  = input;

                _src   = new TSrc();
                _dst   = new TDst();
                _state = new TState();

                CursorChannelAttribute.TrySetCursorChannel(_parent.Host, _src, Ch);
                CursorChannelAttribute.TrySetCursorChannel(_parent.Host, _dst, Ch);
                CursorChannelAttribute.TrySetCursorChannel(_parent.Host, _state, Ch);

                if (parent._initStateAction != null)
                {
                    parent._initStateAction(_state);
                }

                var appendedDataView = new DataViewConstructionUtils.SingleRowLoopDataView <TDst>(parent.Host, _parent._addedSchema);

                appendedDataView.SetCurrentRowObject(_dst);

                Func <int, bool> appendedPredicate =
                    col =>
                {
                    col = _parent._bindings.AddedColumnIndices[col];
                    return(predicate(col));
                };

                _appendedRow = appendedDataView.GetRowCursor(appendedPredicate);
            }
            public Cursor(IHost host, MapTransform <TSrc, TDst> owner, IRowCursor <TSrc> input, Func <int, bool> predicate)
                : base(host, input)
            {
                Ch.AssertValue(owner);
                Ch.AssertValue(input);
                Ch.AssertValue(predicate);

                _src = new TSrc();
                _dst = new TDst();
                _row = new Row(input, owner, predicate, _src, _dst);

                CursorChannelAttribute.TrySetCursorChannel(host, _src, Ch);
                CursorChannelAttribute.TrySetCursorChannel(host, _dst, Ch);
            }