Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenlib/BLI_virtual_array_devirtualize.hh')
-rw-r--r--source/blender/blenlib/BLI_virtual_array_devirtualize.hh13
1 files changed, 12 insertions, 1 deletions
diff --git a/source/blender/blenlib/BLI_virtual_array_devirtualize.hh b/source/blender/blenlib/BLI_virtual_array_devirtualize.hh
index 36369211bfb..2eec4a4121f 100644
--- a/source/blender/blenlib/BLI_virtual_array_devirtualize.hh
+++ b/source/blender/blenlib/BLI_virtual_array_devirtualize.hh
@@ -71,7 +71,18 @@ template<typename Fn, typename... Args> class ArrayDevirtualizer {
template<size_t... I> void execute_fallback_impl(std::index_sequence<I...> /* indices */)
{
- fn_(mask_, mask_, *std::get<I>(params_)...);
+ fn_(mask_, mask_, this->get_execute_param<I>()...);
+ }
+
+ template<size_t I> auto get_execute_param()
+ {
+ using ParamTag = std::tuple_element_t<I, TagsTuple>;
+ if constexpr (std::is_base_of_v<SingleInputTagBase, ParamTag>) {
+ return *std::get<I>(params_);
+ }
+ else if constexpr (std::is_base_of_v<SingleOutputTagBase, ParamTag>) {
+ return std::get<I>(params_)->data();
+ }
}
};