DataViewRow ISchemaBoundRowMapper.GetRow(DataViewRow input, IEnumerable <DataViewSchema.Column> activeColumns)
            {
                Contracts.AssertValue(input);
                Contracts.AssertValue(activeColumns);
                var totalColumnsCount = 1 + _outputGenericSchema.Count;
                var getters           = new Delegate[totalColumnsCount];

                if (activeColumns.Select(c => c.Index).Contains(_outputGenericSchema.Count))
                {
                    getters[totalColumnsCount - 1] = _parent.Stringify
                        ? _parent.GetTextContributionGetter(input, FeatureColumn.Index, _slotNames)
                        : _parent.GetContributionGetter(input, FeatureColumn.Index);
                }

                var genericRow = _genericRowMapper.GetRow(input, activeColumns);

                for (var i = 0; i < _outputGenericSchema.Count; i++)
                {
                    if (genericRow.IsColumnActive(genericRow.Schema[i]))
                    {
                        getters[i] = RowCursorUtils.GetGetterAsDelegate(genericRow, i);
                    }
                }

                return(new SimpleRow(OutputSchema, genericRow, getters));
            }
            public Row GetOutputRow(Row input, Func <int, bool> predicate, out Action disposer)
            {
                Contracts.AssertValue(input);
                Contracts.AssertValue(predicate);
                var totalColumnsCount = 1 + _outputGenericSchema.ColumnCount;
                var getters           = new Delegate[totalColumnsCount];

                if (predicate(totalColumnsCount - 1))
                {
                    getters[totalColumnsCount - 1] = _parent.Stringify
                        ? _parent.GetTextContributionGetter(input, InputRoleMappedSchema.Feature.Index, _slotNames)
                        : _parent.GetContributionGetter(input, InputRoleMappedSchema.Feature.Index);
                }

                var genericRow = _genericRowMapper.GetRow(input, GetGenericPredicate(predicate), out disposer);

                for (var i = 0; i < _outputGenericSchema.ColumnCount; i++)
                {
                    if (genericRow.IsColumnActive(i))
                    {
                        getters[i] = RowCursorUtils.GetGetterAsDelegate(genericRow, i);
                    }
                }

                return(new SimpleRow(OutputSchema, input, getters));
            }