// Construct new arrays for args_base, args, arg_sizes and arg_types
// using the information in MapperComponents and call the corresponding
// target_data_* function using these new arrays.
- std::vector<void *> mapper_args_base;
- std::vector<void *> mapper_args;
- std::vector<int64_t> mapper_arg_sizes;
- std::vector<int64_t> mapper_arg_types;
-
- for (auto& C : MapperComponents.Components) {
- mapper_args_base.push_back(C.Base);
- mapper_args.push_back(C.Begin);
- mapper_arg_sizes.push_back(C.Size);
- mapper_arg_types.push_back(C.Type);
+ std::vector<void *> MapperArgsBase(MapperComponents.Components.size());
+ std::vector<void *> MapperArgs(MapperComponents.Components.size());
+ std::vector<int64_t> MapperArgSizes(MapperComponents.Components.size());
+ std::vector<int64_t> MapperArgTypes(MapperComponents.Components.size());
+
+ for (unsigned I = 0, E = MapperComponents.Components.size(); I < E; ++I) {
+ auto &C =
+ MapperComponents
+ .Components[target_data_function == targetDataEnd ? I : E - I - 1];
+ MapperArgsBase[I] = C.Base;
+ MapperArgs[I] = C.Begin;
+ MapperArgSizes[I] = C.Size;
+ MapperArgTypes[I] = C.Type;
}
int rc = target_data_function(Device, MapperComponents.Components.size(),
- mapper_args_base.data(), mapper_args.data(), mapper_arg_sizes.data(),
- mapper_arg_types.data(), /*arg_mappers*/ nullptr,
- /*__tgt_async_info*/ nullptr);
+ MapperArgsBase.data(), MapperArgs.data(),
+ MapperArgSizes.data(), MapperArgTypes.data(),
+ /*arg_mappers*/ nullptr,
+ /*__tgt_async_info*/ nullptr);
return rc;
}