public Cursor(IChannelProvider provider, RowToRowScorerBase parent, RowCursor input, bool[] active, Func <int, bool> predicateMapper) : base(provider, input) { Ch.AssertValue(parent); Ch.AssertValue(active); Ch.AssertValue(predicateMapper); _bindings = parent.GetBindings(); Schema = parent.OutputSchema; Ch.Assert(active.Length == _bindings.ColumnCount); _active = active; var output = _bindings.RowMapper.GetRow(input, predicateMapper, out _disposer); try { Ch.Assert(output.Schema == _bindings.RowMapper.OutputSchema); _getters = parent.GetGetters(output, iinfo => active[_bindings.MapIinfoToCol(iinfo)]); } catch (Exception) { _disposer?.Invoke(); throw; } }
/// <summary> /// Produces the set of active columns for the scorer (as a bool[] of length bindings.ColumnCount). /// </summary> private static bool[] GetActive(BindingsBase bindings, IEnumerable <DataViewSchema.Column> columns, out IEnumerable <DataViewSchema.Column> inputColumns, out IEnumerable <DataViewSchema.Column> activeRowMapperCols) { var active = bindings.GetActive(columns); Contracts.Assert(active.Length == bindings.ColumnCount); var activeInput = bindings.GetActiveInput(columns); Contracts.Assert(activeInput.Length == bindings.Input.Count); // Get a predicate that determines which Mapper outputs are active. var predicateMapper = bindings.GetActiveMapperColumns(active); Func <int, bool> localMapper = predicateMapper; // Get the active output columns activeRowMapperCols = bindings.RowMapper.OutputSchema.Where(c => predicateMapper(c.Index)); var colsInputForMapper = bindings.RowMapper.GetDependenciesForNewColumns(activeRowMapperCols); var activeInCols = bindings.Input.Where(c => c.Index < activeInput.Length && activeInput[c.Index]); inputColumns = activeInCols.Union(colsInputForMapper); return(active); }
public override IntPtr GetAddress(string funcName) { IntPtr dynAddress = Wgl.wglGetProcAddress(funcName); if (!BindingsBase.IsInvalidAddress(dynAddress)) { return(dynAddress); } return(API.GetProcAddress(opengl32Handle, funcName)); }
/// <summary> /// Produces the set of active columns for the scorer (as a bool[] of length bindings.ColumnCount), /// a predicate for the needed active input columns, and a predicate for the needed active /// mapper columns. /// </summary> private static bool[] GetActive(BindingsBase bindings, Func<int, bool> predicate, out Func<int, bool> predicateInput, out Func<int, bool> predicateMapper) { var active = bindings.GetActive(predicate); Contracts.Assert(active.Length == bindings.ColumnCount); var activeInput = bindings.GetActiveInput(predicate); Contracts.Assert(activeInput.Length == bindings.Input.ColumnCount); // Get a predicate that determines which Mapper outputs are active. predicateMapper = bindings.GetActiveMapperColumns(active); // Now map those to active input columns. var predicateInputForMapper = bindings.RowMapper.GetDependencies(predicateMapper); // Combine the two sets of input columns. predicateInput = col => 0 <= col && col < activeInput.Length && (activeInput[col] || predicateInputForMapper(col)); return active; }
public Cursor(IChannelProvider provider, RowToRowScorerBase parent, DataViewRowCursor input, bool[] active, IEnumerable <DataViewSchema.Column> activeMapperColumns) : base(provider, input) { Ch.AssertValue(parent); Ch.AssertValue(active); Ch.AssertValue(activeMapperColumns); _bindings = parent.GetBindings(); Schema = parent.OutputSchema; Ch.Assert(active.Length == _bindings.ColumnCount); _active = active; _output = _bindings.RowMapper.GetRow(input, activeMapperColumns); try { Ch.Assert(_output.Schema == _bindings.RowMapper.OutputSchema); _getters = parent.GetGetters(_output, iinfo => active[_bindings.MapIinfoToCol(iinfo)]); } catch (Exception) { _output.Dispose(); throw; } }