public Cursor(ExtStatefulFilterTransform <TSrc, TDst, TState> parent, RowCursor <TSrc> input, IEnumerable <DataViewSchema.Column> columnsNeeded) : base(parent.Host) { Ch.AssertValue(input); Ch.AssertValue(columnsNeeded); _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); parent._initStateAction?.Invoke(_state); var appendedDataView = new DataViewConstructionUtils.SingleRowLoopDataView <TDst>(parent.Host, _parent._addedSchema); appendedDataView.SetCurrentRowObject(_dst); var columnNames = columnsNeeded.Select(c => c.Name); _appendedRow = appendedDataView.GetRowCursor(appendedDataView.Schema.Where(c => !c.IsHidden && columnNames.Contains(c.Name))); }
/// <summary> /// The 'reapply' constructor. /// </summary> private ExtStatefulFilterTransform(IHostEnvironment env, ExtStatefulFilterTransform <TSrc, TDst, TState> transform, IDataView newSource) : base(env, RegistrationName, transform) { Host.AssertValue(transform); Host.AssertValue(newSource); _source = newSource; _filterFunc = transform._filterFunc; _typedSource = TypedCursorable <TSrc> .Create(Host, newSource, false, transform._inputSchemaDefinition); _addedSchema = transform._addedSchema; _bindings = new ColumnBindings(newSource.Schema, DataViewConstructionUtils.GetSchemaColumns(_addedSchema)); }