[Bf-blender-cvs] [bd573cf2d74] functions: use vector adaptor instead of pointer+length in fgraph tuple call
Jacques Lucke
noreply at git.blender.org
Tue Jul 16 18:20:33 CEST 2019
Commit: bd573cf2d747670a73bba3d21e31f5d7dd6904d8
Author: Jacques Lucke
Date: Tue Jul 16 16:29:13 2019 +0200
Branches: functions
https://developer.blender.org/rBbd573cf2d747670a73bba3d21e31f5d7dd6904d8
use vector adaptor instead of pointer+length in fgraph tuple call
===================================================================
M source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
===================================================================
diff --git a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
index 2cdc476cd2e..48c9d6a9d82 100644
--- a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
+++ b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
@@ -1,8 +1,12 @@
#include "FN_llvm.hpp"
#include "FN_tuple_call.hpp"
+#include "BLI_vector_adaptor.hpp"
+
namespace FN {
+using BLI::VectorAdaptor;
+
static void try_ensure_tuple_call_bodies(SharedDataFlowGraph &graph)
{
for (uint node_id : graph->node_ids()) {
@@ -441,43 +445,39 @@ class ExecuteFGraph : public TupleCallBody {
SocketInfo &output_info = m_output_info[output_id];
CPPTypeInfo *type_info = output_info.type;
- uint *target_ids = (uint *)BLI_array_alloca(target_ids, possible_target_ids.size());
- uint target_amount = this->filter_uninitialized_targets(
- possible_target_ids, storage, target_ids);
+ uint *target_ids_array = (uint *)alloca(possible_target_ids.size() * sizeof(uint));
+ VectorAdaptor<uint> target_ids(target_ids_array, possible_target_ids.size());
+
+ this->filter_uninitialized_targets(possible_target_ids, storage, target_ids);
- this->forward_output_to_targets(output_id, target_ids, target_amount, type_info, storage);
- this->copy_targets_to_final_output_if_necessary(target_ids, target_amount, storage, fn_out);
+ this->forward_output_to_targets(output_id, target_ids, type_info, storage);
+ this->copy_targets_to_final_output_if_necessary(target_ids, storage, fn_out);
}
- uint filter_uninitialized_targets(ArrayRef<uint> &possible_target_ids,
+ void filter_uninitialized_targets(ArrayRef<uint> possible_target_ids,
SocketValueStorage &storage,
- uint *r_target_ids) const
+ VectorAdaptor<uint> &r_target_ids) const
{
- uint target_amount = 0;
for (uint possible_target_id : possible_target_ids) {
if (!storage.is_input_initialized(possible_target_id)) {
- r_target_ids[target_amount] = possible_target_id;
- target_amount++;
+ r_target_ids.append(possible_target_id);
}
}
- return target_amount;
}
void forward_output_to_targets(uint output_id,
- uint *target_ids,
- uint target_amount,
+ ArrayRef<uint> target_ids,
CPPTypeInfo *type_info,
SocketValueStorage &storage) const
{
- if (target_amount == 0) {
+ if (target_ids.size() == 0) {
this->destruct_output(output_id, type_info, storage);
}
- else if (target_amount == 1) {
+ else if (target_ids.size() == 1) {
this->relocate_output_to_input(output_id, target_ids[0], type_info, storage);
}
else {
- this->forward_output_to_multiple_inputs(
- output_id, target_ids, target_amount, type_info, storage);
+ this->forward_output_to_multiple_inputs(output_id, target_ids, type_info, storage);
}
}
@@ -501,34 +501,30 @@ class ExecuteFGraph : public TupleCallBody {
}
void forward_output_to_multiple_inputs(uint output_id,
- uint *target_ids,
- uint target_amount,
+ ArrayRef<uint> target_ids,
CPPTypeInfo *type_info,
SocketValueStorage &storage) const
{
void *value_src = storage.output_value_ptr(output_id);
- for (uint i = 1; i < target_amount; i++) {
- uint target_id = target_ids[i];
+ for (uint target_id : target_ids.drop_front()) {
void *value_dst = storage.input_value_ptr(target_id);
type_info->copy_to_uninitialized(value_src, value_dst);
storage.set_input_initialized(target_id, true);
}
- uint target_id = target_ids[0];
+ uint target_id = target_ids.first();
void *value_dst = storage.input_value_ptr(target_id);
type_info->relocate_to_uninitialized(value_src, value_dst);
storage.set_output_initialized(output_id, false);
storage.set_input_initialized(target_id, true);
}
- void copy_targets_to_final_output_if_necessary(uint *target_ids,
- uint target_amount,
+ void copy_targets_to_final_output_if_necessary(ArrayRef<uint> target_ids,
SocketValueStorage &storage,
Tuple &fn_out) const
{
- for (uint i = 0; i < target_amount; i++) {
- uint target_id = target_ids[i];
+ for (uint target_id : target_ids) {
SocketInfo &socket_info = m_input_info[target_id];
if (socket_info.is_fn_output) {
uint index = m_fgraph.outputs().index(DFGraphSocket::FromInput(target_id));
More information about the Bf-blender-cvs
mailing list