35 MutableSpan<std::optional<ValueUsage>> input_usages,
58 bool &multi_threading_enabled_;
65 bool &multi_threading_enabled);
82template<
typename... Inputs,
typename... Outputs,
size_t... InIndices,
size_t... OutIndices>
86 std::tuple<Inputs...> &inputs,
87 std::tuple<Outputs *...> &outputs,
88 std::index_sequence<InIndices...> ,
89 std::index_sequence<OutIndices...> )
91 constexpr size_t InputsNum =
sizeof...(Inputs);
92 constexpr size_t OutputsNum =
sizeof...(Outputs);
93 std::array<GMutablePointer, InputsNum> input_pointers;
94 std::array<GMutablePointer, OutputsNum> output_pointers;
95 std::array<std::optional<ValueUsage>, InputsNum> input_usages;
96 std::array<ValueUsage, OutputsNum> output_usages;
97 std::array<bool, OutputsNum> set_outputs;
100 constexpr size_t I = InIndices;
104 input_pointers[
I] = {type, &std::get<I>(inputs)};
109 constexpr size_t I = OutIndices;
113 output_pointers[
I] = {type, std::get<I>(outputs)};
117 set_outputs.fill(
false);
121 fn, input_pointers, output_pointers, input_usages, output_usages, set_outputs};
140template<
typename... Inputs,
typename... Outputs>
144 std::tuple<Inputs...> inputs,
145 std::tuple<Outputs *...> outputs)
154 std::make_index_sequence<
sizeof...(Inputs)>(),
155 std::make_index_sequence<
sizeof...(Outputs)>());
static const CPPType & get()
void set_input_unused_impl(const int index) override
BasicParams(const LazyFunction &fn, Span< GMutablePointer > inputs, Span< GMutablePointer > outputs, MutableSpan< std::optional< ValueUsage > > input_usages, Span< ValueUsage > output_usages, MutableSpan< bool > set_outputs)
void * get_output_data_ptr_impl(const int index) override
void * try_get_input_data_ptr_or_request_impl(const int index) override
ValueUsage get_output_usage_impl(const int index) const override
bool try_enable_multi_threading_impl() override
bool output_was_set_impl(const int index) const override
void * try_get_input_data_ptr_impl(const int index) const override
void output_set_impl(const int index) override
virtual void * init_storage(LinearAllocator<> &allocator) const
Span< Input > inputs() const
Span< Output > outputs() const
virtual void destruct_storage(void *storage) const
void execute(Params ¶ms, const Context &context) const
void output_set_impl(const int index) override
void * get_output_data_ptr_impl(const int index) override
void * try_get_input_data_ptr_impl(const int index) const override
bool try_enable_multi_threading_impl() override
RemappedParams(const LazyFunction &fn, Params &base_params, Span< int > input_map, Span< int > output_map, bool &multi_threading_enabled)
bool output_was_set_impl(const int index) const override
ValueUsage get_output_usage_impl(const int index) const override
void set_input_unused_impl(const int index) override
void * try_get_input_data_ptr_or_request_impl(const int index) override
void execute_lazy_function_eagerly_impl(const LazyFunction &fn, UserData *user_data, LocalUserData *local_user_data, std::tuple< Inputs... > &inputs, std::tuple< Outputs *... > &outputs, std::index_sequence< InIndices... >, std::index_sequence< OutIndices... >)
void execute_lazy_function_eagerly(const LazyFunction &fn, UserData *user_data, LocalUserData *local_user_data, std::tuple< Inputs... > inputs, std::tuple< Outputs *... > outputs)