• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • Compute Graph Framework SDK Reference  5.14
    All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
    ParameterDescriptor.hpp
    Go to the documentation of this file.
    1
    2//
    3// Notice
    4// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES
    5// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
    6// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT,
    7// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
    8//
    9// NVIDIA CORPORATION & AFFILIATES assumes no responsibility for the consequences of use of such
    10// information or for any infringement of patents or other rights of third parties that may
    11// result from its use. No license is granted by implication or otherwise under any patent
    12// or patent rights of NVIDIA CORPORATION & AFFILIATES. No third party distribution is allowed unless
    13// expressly authorized by NVIDIA. Details are subject to change without notice.
    14// This code supersedes and replaces all information previously supplied.
    15// NVIDIA CORPORATION & AFFILIATES products are not authorized for use as critical
    16// components in life support devices or systems without express written approval of
    17// NVIDIA CORPORATION & AFFILIATES.
    18//
    19// SPDX-FileCopyrightText: Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
    20// SPDX-License-Identifier: LicenseRef-NvidiaProprietary
    21//
    22// NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
    23// property and proprietary rights in and to this material, related
    24// documentation and any modifications thereto. Any use, reproduction,
    25// disclosure or distribution of this material and related documentation
    26// without an express license agreement from NVIDIA CORPORATION or
    27// its affiliates is strictly prohibited.
    28//
    30
    31#ifndef DW_FRAMEWORK_PARAMETERDESCRIPTOR_HPP_
    32#define DW_FRAMEWORK_PARAMETERDESCRIPTOR_HPP_
    33
    36#include <dwshared/dwfoundation/dw/core/container/StringView.hpp>
    37#include <dwshared/dwfoundation/dw/core/language/Optional.hpp>
    38#include <dwshared/dwfoundation/dw/core/language/Tuple.hpp>
    39
    40namespace dw
    41{
    42namespace framework
    43{
    44
    45// Indices within the tuple describing constructor arguments
    46// coverity[autosar_cpp14_a0_1_1_violation] FP: nvbugs/2813925
    47// coverity[autosar_cpp14_m0_1_4_violation] FP: nvbugs/2813925
    48static constexpr const size_t PARAMETER_CONSTRUCTOR_ARGUMENT_TYPE{0U};
    49// coverity[autosar_cpp14_a0_1_1_violation] FP: nvbugs/2813925
    50// coverity[autosar_cpp14_m0_1_4_violation] FP: nvbugs/2813925
    51static constexpr const size_t PARAMETER_CONSTRUCTOR_ARGUMENT_DESCRIPTOR{1U};
    52
    59constexpr std::tuple<> describeConstructorArguments()
    60{
    61 return std::make_tuple();
    62}
    63
    70template <
    71 typename Argument1T,
    72 typename Arg1>
    73// Overloaded functions are provided for ease of use
    74// coverity[autosar_cpp14_a2_10_5_violation]
    75constexpr auto describeConstructorArguments(const Arg1&& arg1)
    76{
    77 return std::make_tuple(
    78 std::make_tuple(
    79 static_cast<Argument1T*>(nullptr),
    80 std::forward<const Arg1>(arg1)));
    81}
    82
    89template <
    90 typename Argument1T, typename Argument2T,
    91 typename Arg1, typename Arg2>
    92// Overloaded functions are provided for ease of use
    93// coverity[autosar_cpp14_a2_10_5_violation]
    94constexpr auto describeConstructorArguments(const Arg1&& arg1, const Arg2&& arg2) -> std::tuple<std::tuple<Argument1T*, Arg1>, std::tuple<Argument2T*, Arg2>>
    95{
    96 return std::make_tuple(
    97 std::make_tuple(
    98 static_cast<Argument1T*>(nullptr),
    99 std::forward<const Arg1>(arg1)),
    100 std::make_tuple(
    101 static_cast<Argument2T*>(nullptr),
    102 std::forward<const Arg2>(arg2)));
    103}
    104
    111template <
    112 typename Argument1T, typename Argument2T, typename Argument3T,
    113 typename Arg1, typename Arg2, typename Arg3>
    114// Overloaded functions are provided for ease of use
    115// coverity[autosar_cpp14_a2_10_5_violation]
    116constexpr auto describeConstructorArguments(const Arg1&& arg1, const Arg2&& arg2, const Arg3&& arg3)
    117{
    118 return std::make_tuple(
    119 std::make_tuple(
    120 static_cast<Argument1T*>(nullptr),
    121 std::forward<const Arg1>(arg1)),
    122 std::make_tuple(
    123 static_cast<Argument2T*>(nullptr),
    124 std::forward<const Arg2>(arg2)),
    125 std::make_tuple(
    126 static_cast<Argument3T*>(nullptr),
    127 std::forward<const Arg3>(arg3)));
    128}
    129
    136template <
    137 typename Argument1T, typename Argument2T, typename Argument3T, typename Argument4T,
    138 typename Arg1, typename Arg2, typename Arg3, typename Arg4>
    139// Overloaded functions are provided for ease of use
    140// coverity[autosar_cpp14_a2_10_5_violation]
    141constexpr auto describeConstructorArguments(const Arg1&& arg1, const Arg2&& arg2, const Arg3&& arg3, const Arg4&& arg4)
    142{
    143 return std::make_tuple(
    144 std::make_tuple(
    145 static_cast<Argument1T*>(nullptr),
    146 std::forward<const Arg1>(arg1)),
    147 std::make_tuple(
    148 static_cast<Argument2T*>(nullptr),
    149 std::forward<const Arg2>(arg2)),
    150 std::make_tuple(
    151 static_cast<Argument3T*>(nullptr),
    152 std::forward<const Arg3>(arg3)),
    153 std::make_tuple(
    154 static_cast<Argument4T*>(nullptr),
    155 std::forward<const Arg4>(arg4)));
    156}
    157
    164template <
    165 typename Argument1T, typename Argument2T, typename Argument3T, typename Argument4T, typename Argument5T,
    166 typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
    167// Overloaded functions are provided for ease of use
    168// coverity[autosar_cpp14_a2_10_5_violation]
    169constexpr auto describeConstructorArguments(const Arg1&& arg1, const Arg2&& arg2, const Arg3&& arg3, const Arg4&& arg4, const Arg5&& arg5)
    170{
    171 return std::make_tuple(
    172 std::make_tuple(
    173 static_cast<Argument1T*>(nullptr),
    174 std::forward<const Arg1>(arg1)),
    175 std::make_tuple(
    176 static_cast<Argument2T*>(nullptr),
    177 std::forward<const Arg2>(arg2)),
    178 std::make_tuple(
    179 static_cast<Argument3T*>(nullptr),
    180 std::forward<const Arg3>(arg3)),
    181 std::make_tuple(
    182 static_cast<Argument4T*>(nullptr),
    183 std::forward<const Arg4>(arg4)),
    184 std::make_tuple(
    185 static_cast<Argument5T*>(nullptr),
    186 std::forward<const Arg5>(arg5)));
    187}
    188
    195template <
    196 typename Argument1T, typename Argument2T, typename Argument3T, typename Argument4T, typename Argument5T, typename Argument6T,
    197 typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6>
    198// Overloaded functions are provided for ease of use
    199// coverity[autosar_cpp14_a2_10_5_violation]
    200constexpr auto describeConstructorArguments(const Arg1&& arg1, const Arg2&& arg2, const Arg3&& arg3, const Arg4&& arg4, const Arg5&& arg5, const Arg6&& arg6)
    201{
    202 return std::make_tuple(
    203 std::make_tuple(
    204 static_cast<Argument1T*>(nullptr),
    205 std::forward<const Arg1>(arg1)),
    206 std::make_tuple(
    207 static_cast<Argument2T*>(nullptr),
    208 std::forward<const Arg2>(arg2)),
    209 std::make_tuple(
    210 static_cast<Argument3T*>(nullptr),
    211 std::forward<const Arg3>(arg3)),
    212 std::make_tuple(
    213 static_cast<Argument4T*>(nullptr),
    214 std::forward<const Arg4>(arg4)),
    215 std::make_tuple(
    216 static_cast<Argument5T*>(nullptr),
    217 std::forward<const Arg5>(arg5)),
    218 std::make_tuple(
    219 static_cast<Argument6T*>(nullptr),
    220 std::forward<const Arg6>(arg6)));
    221}
    222
    229template <typename... Args>
    230// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    231constexpr auto describeConstructorArgument(const Args&&... args) -> dw::core::Tuple<Args...>
    232{
    233 return dw::core::make_tuple(
    234 std::forward<const Args>(args)...);
    235}
    236
    237// coverity[autosar_cpp14_a14_1_1_violation]
    238template <typename Type_, typename SemanticType_, bool IsIndex, size_t ArraySize, bool IsAbstract, bool HasDefault, typename... MemberPointers>
    240{
    241 dw::core::StringView typeName;
    242 dw::core::StringView parameterName;
    243 // coverity[autosar_cpp14_a0_1_6_violation]
    244 using Type = Type_;
    245 // coverity[autosar_cpp14_a0_1_6_violation]
    246 using SemanticType = SemanticType_;
    247 static constexpr bool IS_INDEX{IsIndex};
    248 static constexpr size_t ARRAY_SIZE{ArraySize};
    249 static constexpr bool IS_ABSTRACT{IsAbstract};
    250 // coverity[autosar_cpp14_a0_1_1_violation] FP: nvbugs/2813925
    251 // coverity[autosar_cpp14_m0_1_4_violation] FP: nvbugs/2813925
    252 static constexpr bool HAS_DEFAULT{HasDefault};
    253 std::tuple<const MemberPointers...> memberPointers;
    254
    255 constexpr ParameterDescriptorT(dw::core::StringView const&& typeName_, dw::core::StringView const&& parameterName_, const MemberPointers&&... memberPointers_)
    256 : typeName{std::move(typeName_)}
    257 , parameterName{std::move(parameterName_)}
    258 , memberPointers(std::make_tuple<const MemberPointers...>(std::forward<const MemberPointers>(memberPointers_)...))
    259 {
    260 }
    261};
    262
    263template <typename Type_, typename SemanticType_, bool IsIndex, size_t ArraySize, bool IsAbstract, bool HasDefault, typename... MemberPointers>
    264constexpr bool ParameterDescriptorT<Type_, SemanticType_, IsIndex, ArraySize, IsAbstract, HasDefault, MemberPointers...>::IS_INDEX;
    265
    266template <typename Type_, typename SemanticType_, bool IsIndex, size_t ArraySize, bool IsAbstract, bool HasDefault, typename... MemberPointers>
    267constexpr size_t ParameterDescriptorT<Type_, SemanticType_, IsIndex, ArraySize, IsAbstract, HasDefault, MemberPointers...>::ARRAY_SIZE;
    268
    269template <typename Type_, typename SemanticType_, bool IsIndex, size_t ArraySize, bool IsAbstract, bool HasDefault, typename... MemberPointers>
    270constexpr bool ParameterDescriptorT<Type_, SemanticType_, IsIndex, ArraySize, IsAbstract, HasDefault, MemberPointers...>::HAS_DEFAULT;
    271
    272// coverity[autosar_cpp14_a14_1_1_violation]
    273template <typename Type, typename SemanticType, bool IsIndex, size_t ArraySize, bool IsAbstract, typename DefaultType, typename... MemberPointers>
    274struct ParameterDescriptorWithDefaultT : public ParameterDescriptorT<Type, SemanticType, IsIndex, ArraySize, IsAbstract, true, MemberPointers...>
    275{
    276 DefaultType defaultValue;
    277
    278 constexpr ParameterDescriptorWithDefaultT(dw::core::StringView const&& typeName_, dw::core::StringView const&& parameterName_, const DefaultType&& defaultValue_, const MemberPointers&&... memberPointers_)
    279 : ParameterDescriptorT<Type, SemanticType, IsIndex, ArraySize, IsAbstract, true, MemberPointers...>{std::move(typeName_), std::move(parameterName_), std::forward<const MemberPointers>(memberPointers_)...}
    280 , defaultValue{std::move(defaultValue_)}
    281 {
    282 }
    283};
    284
    285} // namespace framework
    286} // namespace dw
    287
    288#define DW_PARAMETER_TYPE_NAME_STRING_VIEW(TYPE_NAME_STR) TYPE_NAME_STR##_sv
    289#define DW_DESCRIBE_PARAMETER(TYPE_NAME, args...) dw::framework::describeParameter<TYPE_NAME, TYPE_NAME>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    290#define DW_DESCRIBE_PARAMETER_WITH_SEMANTIC(TYPE_NAME, SEMANTIC_TYPE_NAME, args...) dw::framework::describeParameter<TYPE_NAME, SEMANTIC_TYPE_NAME>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    291
    292namespace dw
    293{
    294namespace framework
    295{
    296
    305template <typename T, typename S, typename... MemberPointers>
    306// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    307constexpr auto describeParameter(
    308 dw::core::StringView const&& typeName, dw::core::StringView const&& parameterName, const MemberPointers&&... memberPointers) -> ParameterDescriptorT<T, S, false, 0, false, false, MemberPointers...>
    309{
    310 return ParameterDescriptorT<T, S, false, 0, false, false, MemberPointers...>(
    311 std::move(typeName),
    312 std::move(parameterName),
    313 std::forward<const MemberPointers>(memberPointers)...);
    314}
    315
    316} // namespace framework
    317} // namespace dw
    318
    319#define DW_DESCRIBE_ABSTRACT_PARAMETER(TYPE_NAME, args...) dw::framework::describeAbstractParameter<TYPE_NAME>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    320#define DW_DESCRIBE_ABSTRACT_ARRAY_PARAMETER(TYPE_NAME, PARAM_NAME, ARRAY_SIZE, args...) dw::framework::describeAbstractArrayParameter<TYPE_NAME, ARRAY_SIZE>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), PARAM_NAME, ##args)
    321
    322namespace dw
    323{
    324namespace framework
    325{
    326
    332template <typename T>
    334 dw::core::StringView const&& typeName, dw::core::StringView const&& parameterName)
    335{
    337 std::move(typeName),
    338 std::move(parameterName));
    339}
    340
    346template <typename T, size_t ArraySize>
    348 dw::core::StringView const&& typeName, dw::core::StringView const&& parameterName)
    349{
    351 std::move(typeName),
    352 std::move(parameterName));
    353}
    354
    355} // namespace framework
    356} // namespace dw
    357
    358#define DW_DESCRIBE_INDEX_PARAMETER(TYPE_NAME, args...) dw::framework::describeIndexParameter<TYPE_NAME, TYPE_NAME>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    359#define DW_DESCRIBE_INDEX_PARAMETER_WITH_SEMANTIC(TYPE_NAME, SEMANTIC_TYPE_NAME, args...) dw::framework::describeIndexParameter<TYPE_NAME, SEMANTIC_TYPE_NAME>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    360
    361namespace dw
    362{
    363namespace framework
    364{
    365
    372template <typename T, typename S, typename... MemberPointers>
    374 dw::core::StringView const&& typeName, dw::core::StringView const&& parameterName, const MemberPointers&&... memberPointers)
    375{
    376 return ParameterDescriptorT<T, S, true, 0, false, false, MemberPointers...>(
    377 std::move(typeName),
    378 std::move(parameterName),
    379 std::forward<const MemberPointers>(memberPointers)...);
    380}
    381
    382} // namespace framework
    383} // namespace dw
    384
    385#define DW_DESCRIBE_ARRAY_PARAMETER(TYPE_NAME, PARAM_NAME, ARRAY_SIZE, args...) dw::framework::describeArrayParameter<TYPE_NAME, TYPE_NAME, ARRAY_SIZE>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), PARAM_NAME, ##args)
    386#define DW_DESCRIBE_ARRAY_PARAMETER_WITH_SEMANTIC(TYPE_NAME, SEMANTIC_TYPE_NAME, PARAM_NAME, ARRAY_SIZE, args...) dw::framework::describeArrayParameter<TYPE_NAME, SEMANTIC_TYPE_NAME, ARRAY_SIZE>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), PARAM_NAME, ##args)
    387
    388namespace dw
    389{
    390namespace framework
    391{
    392
    398template <typename T, typename S, size_t ArraySize, typename... MemberPointers>
    400 dw::core::StringView const&& typeName, dw::core::StringView const&& parameterName, const MemberPointers&&... memberPointers)
    401{
    402 return ParameterDescriptorT<T, S, false, ArraySize, false, false, MemberPointers...>(
    403 std::move(typeName),
    404 std::move(parameterName),
    405 std::forward<const MemberPointers>(memberPointers)...);
    406}
    407
    408} // namespace framework
    409} // namespace dw
    410
    411#define DW_DESCRIBE_UNNAMED_PARAMETER(TYPE_NAME, args...) dw::framework::describeUnnamedParameter<TYPE_NAME, TYPE_NAME>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    412#define DW_DESCRIBE_UNNAMED_PARAMETER_WITH_SEMANTIC(TYPE_NAME, SEMANTIC_TYPE_NAME, args...) dw::framework::describeUnnamedParameter<TYPE_NAME, SEMANTIC_TYPE_NAME>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    413
    414namespace dw
    415{
    416namespace framework
    417{
    418
    425template <typename T, typename S, typename... MemberPointers>
    426// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    428 dw::core::StringView const&& typeName, const MemberPointers&&... memberPointers) -> ParameterDescriptorT<T, S, false, 0, false, false, MemberPointers...>
    429{
    430 // coverity[autosar_cpp14_a5_1_1_violation] FP: nvbugs/3364868
    431 // coverity[autosar_cpp14_a5_2_2_violation]
    432 return describeParameter<T, S, MemberPointers...>(
    433 std::move(typeName),
    434 // coverity[autosar_cpp14_a5_1_1_violation]
    435 ""_sv,
    436 std::forward<const MemberPointers>(memberPointers)...);
    437}
    438
    439} // namespace framework
    440} // namespace dw
    441
    442#define DW_DESCRIBE_UNNAMED_ARRAY_PARAMETER(TYPE_NAME, ARRAY_SIZE, args...) dw::framework::describeUnnamedArrayParameter<TYPE_NAME, TYPE_NAME, ARRAY_SIZE>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    443#define DW_DESCRIBE_UNNAMED_ARRAY_PARAMETER_WITH_SEMANTIC(TYPE_NAME, SEMANTIC_TYPE_NAME, ARRAY_SIZE, args...) dw::framework::describeUnnamedArrayParameter<TYPE_NAME, SEMANTIC_TYPE_NAME, ARRAY_SIZE>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    444
    445namespace dw
    446{
    447namespace framework
    448{
    449
    456template <typename T, typename S, size_t ArraySize, typename... MemberPointers>
    458 dw::core::StringView const&& typeName, const MemberPointers&&... memberPointers)
    459{
    460 return describeArrayParameter<T, S, ArraySize>(
    461 std::move(typeName),
    462 ""_sv,
    463 std::forward<const MemberPointers>(memberPointers)...);
    464}
    465
    466} // namespace framework
    467} // namespace dw
    468
    469#define DW_DESCRIBE_PARAMETER_WITH_DEFAULT(TYPE_NAME, args...) dw::framework::describeParameterWithDefault<TYPE_NAME, TYPE_NAME>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    470
    471namespace dw
    472{
    473namespace framework
    474{
    475
    481template <typename T, typename S, typename... MemberPointers>
    482// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    484 dw::core::StringView const&& typeName, dw::core::StringView const&& parameterName, T defaultValue, const MemberPointers&&... memberPointers) -> ParameterDescriptorWithDefaultT<T, S, false, 0, false, T, MemberPointers...>
    485{
    486 return ParameterDescriptorWithDefaultT<T, S, false, 0, false, T, MemberPointers...>(
    487 std::move(typeName),
    488 std::move(parameterName),
    489 std::move(defaultValue),
    490 std::forward<const MemberPointers>(memberPointers)...);
    491}
    492
    493} // namespace framework
    494} // namespace dw
    495
    496#define DW_DESCRIBE_ARRAY_PARAMETER_WITH_DEFAULT(TYPE_NAME, args...) dw::framework::describeArrayParameterWithDefault<TYPE_NAME, TYPE_NAME>(DW_PARAMETER_TYPE_NAME_STRING_VIEW(#TYPE_NAME), ##args)
    497
    498namespace dw
    499{
    500namespace framework
    501{
    502
    508template <typename T, typename S, size_t ArraySize, typename... MemberPointers>
    510 dw::core::StringView const&& typeName, dw::core::StringView const&& parameterName, std::array<T, ArraySize> defaultValue, const MemberPointers&&... memberPointers)
    511{
    513 std::move(typeName),
    514 std::move(parameterName),
    515 std::move(defaultValue),
    516 std::forward<const MemberPointers>(memberPointers)...);
    517}
    518
    520template <typename NodeT>
    521// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    522// coverity[autosar_cpp14_a7_1_5_violation] RFD Accepted: TID-1984
    523constexpr auto describeParameters()
    524{
    526}
    527
    528namespace detail
    529{
    530
    532template <
    533 typename Param, typename MemberPtr,
    534 typename std::enable_if_t<!Param::HAS_DEFAULT, void>* = nullptr>
    535// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    536void populateDefault(const Param& param, MemberPtr& memberPtr)
    537{
    538 static_cast<void>(param);
    539 static_cast<void>(memberPtr);
    540}
    541
    543template <
    544 typename Param, typename MemberPtr,
    545 typename std::enable_if_t<Param::HAS_DEFAULT, void>* = nullptr>
    546// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    547void populateDefault(const Param& param, MemberPtr& memberPtr)
    548{
    549 memberPtr = param.defaultValue;
    550}
    551
    553template <
    554 typename Param, typename MemberPtr,
    555 typename std::enable_if_t<!Param::HAS_DEFAULT, void>* = nullptr>
    556// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    557void populateArrayDefault(const Param& param, MemberPtr& memberPtr, size_t index)
    558{
    559 static_cast<void>(param);
    560 static_cast<void>(memberPtr);
    561 static_cast<void>(index);
    562}
    563
    565template <
    566 typename Param, typename MemberPtr,
    567 typename std::enable_if_t<Param::HAS_DEFAULT, void>* = nullptr>
    568// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    569void populateArrayDefault(const Param& param, MemberPtr& memberPtr, size_t index)
    570{
    571 memberPtr[index] = param.defaultValue[index];
    572}
    573
    575template <
    576 size_t MemberIndex, typename ArgType, typename MemberPtrs,
    577 typename std::enable_if_t<std::tuple_size<MemberPtrs>() == 0, void>* = nullptr>
    578// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    579auto getMemberPtr(ArgType& arg, MemberPtrs memberPtrs) -> ArgType&
    580{
    581 static_cast<void>(memberPtrs);
    582 return arg;
    583}
    584
    586template <
    587 size_t MemberIndex, typename ArgType, typename MemberPtrs,
    588 typename std::enable_if_t<MemberIndex + 1 == std::tuple_size<MemberPtrs>(), void>* = nullptr>
    589// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    590// coverity[autosar_cpp14_a7_1_5_violation]
    591auto& getMemberPtr(ArgType& arg, MemberPtrs memberPtrs)
    592{
    593 // coverity[autosar_cpp14_a8_5_2_violation]
    594 auto member = std::get<MemberIndex>(memberPtrs);
    595 return arg.*member;
    596}
    597
    599template <
    600 size_t MemberIndex, typename ArgType, typename MemberPtrs,
    601 typename std::enable_if_t<MemberIndex + 1 < std::tuple_size<MemberPtrs>(), void>* = nullptr>
    602// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    603auto& getMemberPtr(ArgType& arg, MemberPtrs memberPtrs)
    604{
    605 auto& member = std::get<MemberIndex>(memberPtrs);
    606 auto& m = arg.*member;
    607 return getMemberPtr<MemberIndex + 1>(m, memberPtrs);
    608}
    609
    611template <typename NodeT, size_t ConstructorParameterIndex>
    612// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    613constexpr size_t constructorArgumentParameterSize()
    614{
    615 // coverity[autosar_cpp14_a13_5_3_violation]
    616 return dw::core::tuple_size<
    617 std::tuple_element_t<
    619 std::tuple_element_t<
    620 ConstructorParameterIndex,
    621 decltype(describeParameters<NodeT>())>>>();
    622}
    623
    625template <typename ParamT>
    626// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    627constexpr bool isIndexParameter()
    628{
    629 return ParamT::IS_INDEX;
    630}
    631
    633template <typename ParamT>
    634// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    635constexpr bool isArrayParameter()
    636{
    637 // coverity[autosar_cpp14_a5_1_1_violation] RFD Accepted: TID-2056
    638 return ParamT::ARRAY_SIZE > 0U;
    639}
    640
    642template <typename ParamT>
    643// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    644constexpr bool isAbstractParameter()
    645{
    646 return ParamT::IS_ABSTRACT;
    647}
    648
    650template <
    651 typename ArgType, typename ParamT,
    652 typename std::enable_if_t<isAbstractParameter<ParamT>(), void>* = nullptr>
    653// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    654void populateParameter(const ParameterProvider& provider, ArgType& arg, const ParamT& param)
    655{
    656 static_cast<void>(provider);
    657 static_cast<void>(arg);
    658 static_cast<void>(param);
    659}
    660
    666template <
    667 typename ArgType, typename ParamT,
    668 typename std::enable_if_t<!isAbstractParameter<ParamT>() && !isArrayParameter<ParamT>() && !isIndexParameter<ParamT>(), void>* = nullptr>
    669// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    670void populateParameter(const ParameterProvider& provider, ArgType& arg, const ParamT& param)
    671{
    672 using DataType = typename ParamT::Type;
    673 using SemanticDataType = typename ParamT::SemanticType;
    674 DataType& memberPtr{getMemberPtr<0>(arg, param.memberPointers)};
    675 bool hadParameter{provider.getOptional<SemanticDataType, DataType>(param.parameterName, &memberPtr)};
    676 if (!hadParameter)
    677 {
    678 populateDefault(param, memberPtr);
    679 }
    680}
    681
    687template <
    688 typename ArgType, typename ParamT,
    689 typename std::enable_if_t<!isAbstractParameter<ParamT>() && !isArrayParameter<ParamT>() && isIndexParameter<ParamT>(), void>* = nullptr>
    690// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    691void populateParameter(const ParameterProvider& provider, ArgType& arg, const ParamT& param)
    692{
    693 using DataType = typename ParamT::Type;
    694 using SemanticDataType = typename ParamT::SemanticType;
    695 DataType& memberPtr = getMemberPtr<0>(arg, param.memberPointers);
    696
    697 size_t index = static_cast<size_t>(-1);
    698 bool hadParameter = provider.getOptional<size_t, size_t>(param.parameterName, &index);
    699 if (hadParameter)
    700 {
    701 hadParameter = provider.getOptional<SemanticDataType, DataType>("", index, &memberPtr);
    702 }
    703 if (!hadParameter)
    704 {
    705 populateDefault(param, memberPtr);
    706 }
    707}
    708
    714template <
    715 typename ArgType, typename ParamT,
    716 typename std::enable_if_t<!isAbstractParameter<ParamT>() && isArrayParameter<ParamT>(), void>* = nullptr>
    717// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    718void populateParameter(const ParameterProvider& provider, ArgType& arg, const ParamT& param)
    719{
    720 using DataType = typename ParamT::Type;
    721 using SemanticDataType = typename ParamT::SemanticType;
    722
    723 constexpr size_t arraySize = ParamT::ARRAY_SIZE;
    724
    725 DataType(&memberPtr)[arraySize] = getMemberPtr<0>(arg, param.memberPointers);
    726 for (size_t i = 0; i < arraySize; ++i)
    727 {
    728 bool hadParameter = provider.getOptional<SemanticDataType, DataType>(param.parameterName, i, &memberPtr[i]);
    729 if (!hadParameter)
    730 {
    731 populateArrayDefault(param, memberPtr, i);
    732 }
    733 }
    734}
    735
    737template <typename ArgType>
    738// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    739void populateParametersRecursion(const ParameterProvider& provider, ArgType& arg, const dw::core::Tuple<>& t)
    740{
    741 static_cast<void>(provider);
    742 static_cast<void>(arg);
    743 static_cast<void>(t);
    744}
    745
    747template <typename ArgType, typename THead>
    748// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    749void populateParametersRecursion(const ParameterProvider& provider, ArgType& arg, const dw::core::Tuple<THead>& t)
    750{
    751 populateParameter(provider, arg, t.m_head);
    752}
    753
    755template <
    756 typename ArgType, typename THead, typename... TTail,
    757 typename std::enable_if_t<sizeof...(TTail) != 0>* = nullptr>
    758// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    759void populateParametersRecursion(const ParameterProvider& provider, ArgType& arg, const dw::core::Tuple<THead, TTail...>& t)
    760{
    761 populateParameter(provider, arg, t.m_head);
    762 populateParametersRecursion(provider, arg, t.m_tail);
    763}
    764
    770template <typename NodeT, size_t ConstructorParameterIndex, typename ConstructorArgsType>
    771// TODO(dwplc): FP -- The other populateParameters() functions are defined in the parent namespace
    772// coverity[autosar_cpp14_a2_10_5_violation]
    773void populateParameters(const ParameterProvider& provider, ConstructorArgsType& constructorArguments)
    774{
    775 try
    776 {
    777 // coverity[autosar_cpp14_a8_5_2_violation]
    778 auto& arg = std::get<ConstructorParameterIndex>(constructorArguments);
    779 // coverity[autosar_cpp14_a8_5_2_violation]
    780 constexpr auto params = std::get<dw::framework::PARAMETER_CONSTRUCTOR_ARGUMENT_DESCRIPTOR>(
    781 std::get<ConstructorParameterIndex>(describeParameters<NodeT>()));
    782 // coverity[cert_err59_cpp_violation]
    783 populateParametersRecursion(provider, arg, params);
    784 }
    785 catch (ExceptionWithStatus& e)
    786 {
    787 throw ExceptionWithStatus(e.statusCode(), "Exception while populating parameters of mangled node type ", typeid(NodeT).name(), ": ", e.message());
    788 }
    789}
    790
    791} // namespace detail
    792
    794template <
    795 typename NodeT,
    796 class ConstructorArguments,
    797 typename std::enable_if_t<std::tuple_size<ConstructorArguments>() == 1, void>* = nullptr>
    798// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    799void populateParameters(ConstructorArguments& constructorArguments, const ParameterProvider& provider)
    800{
    801 detail::populateParameters<NodeT, 0>(provider, constructorArguments);
    802}
    803
    805template <
    806 typename NodeT,
    807 class ConstructorArguments,
    808 typename std::enable_if_t<std::tuple_size<ConstructorArguments>() == 2, void>* = nullptr>
    809// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    810void populateParameters(ConstructorArguments& constructorArguments, const ParameterProvider& provider)
    811{
    812 detail::populateParameters<NodeT, 0>(provider, constructorArguments);
    813 detail::populateParameters<NodeT, 1>(provider, constructorArguments);
    814}
    815
    817template <
    818 typename NodeT,
    819 class ConstructorArguments,
    820 typename std::enable_if_t<std::tuple_size<ConstructorArguments>() == 3, void>* = nullptr>
    821// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    822void populateParameters(ConstructorArguments& constructorArguments, const ParameterProvider& provider)
    823{
    824 detail::populateParameters<NodeT, 0>(provider, constructorArguments);
    825 detail::populateParameters<NodeT, 1>(provider, constructorArguments);
    826 detail::populateParameters<NodeT, 2>(provider, constructorArguments);
    827}
    828
    830template <
    831 typename NodeT,
    832 class ConstructorArguments,
    833 typename std::enable_if_t<std::tuple_size<ConstructorArguments>() == 4, void>* = nullptr>
    834// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    835void populateParameters(ConstructorArguments& constructorArguments, const ParameterProvider& provider)
    836{
    837 detail::populateParameters<NodeT, 0>(provider, constructorArguments);
    838 detail::populateParameters<NodeT, 1>(provider, constructorArguments);
    839 detail::populateParameters<NodeT, 2>(provider, constructorArguments);
    840 detail::populateParameters<NodeT, 3>(provider, constructorArguments);
    841}
    842
    844template <
    845 typename NodeT,
    846 class ConstructorArguments,
    847 typename std::enable_if_t<std::tuple_size<ConstructorArguments>() == 5, void>* = nullptr>
    848// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    849void populateParameters(ConstructorArguments& constructorArguments, const ParameterProvider& provider)
    850{
    851 detail::populateParameters<NodeT, 0>(provider, constructorArguments);
    852 detail::populateParameters<NodeT, 1>(provider, constructorArguments);
    853 detail::populateParameters<NodeT, 2>(provider, constructorArguments);
    854 detail::populateParameters<NodeT, 3>(provider, constructorArguments);
    855 detail::populateParameters<NodeT, 4>(provider, constructorArguments);
    856}
    857
    859template <
    860 typename NodeT,
    861 class ConstructorArguments,
    862 typename std::enable_if_t<std::tuple_size<ConstructorArguments>() == 6, void>* = nullptr>
    863// Output parameter is needed to populate member of arbitrary struct
    864// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    865void populateParameters(ConstructorArguments& constructorArguments, const ParameterProvider& provider)
    866{
    867 detail::populateParameters<NodeT, 0>(provider, constructorArguments);
    868 detail::populateParameters<NodeT, 1>(provider, constructorArguments);
    869 detail::populateParameters<NodeT, 2>(provider, constructorArguments);
    870 detail::populateParameters<NodeT, 3>(provider, constructorArguments);
    871 detail::populateParameters<NodeT, 4>(provider, constructorArguments);
    872 detail::populateParameters<NodeT, 5>(provider, constructorArguments);
    873}
    874
    875namespace detail
    876{
    877
    878// Get the Number of constructor arguments of the passed node.
    879template <typename NodeT>
    880// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    881constexpr std::size_t parameterConstructorArgumentSize()
    882{
    883 return std::tuple_size<decltype(describeParameters<NodeT>())>::value;
    884}
    885
    887template <
    888 typename NodeT, size_t ConstructorArgumentIndex,
    889 typename std::enable_if_t<ConstructorArgumentIndex == parameterConstructorArgumentSize<NodeT>(), void>* = nullptr>
    890// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    891// coverity[autosar_cpp14_a7_1_5_violation]
    893{
    894 return std::make_tuple();
    895}
    896
    898template <
    899 typename NodeT, size_t ConstructorArgumentIndex,
    900 typename std::enable_if_t<ConstructorArgumentIndex<parameterConstructorArgumentSize<NodeT>(), void>* = nullptr>
    901 // coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    902 // coverity[autosar_cpp14_a7_1_5_violation]
    904{
    905 using NodeParams = decltype(describeParameters<NodeT>());
    906
    907 using ConstructorParameter = std::tuple_element_t<ConstructorArgumentIndex, NodeParams>;
    908 using ArgType = std::remove_pointer_t<
    909 typename std::tuple_element_t<PARAMETER_CONSTRUCTOR_ARGUMENT_TYPE, ConstructorParameter>>;
    910 ArgType arg{};
    911
    912 return std::tuple_cat(std::make_tuple(arg), createConstructorArguments<NodeT, ConstructorArgumentIndex + 1>());
    913}
    914
    915} // namespace detail
    916
    918template <typename NodeT>
    919// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    920// coverity[autosar_cpp14_a7_1_5_violation]
    922{
    923 return detail::createConstructorArguments<NodeT, 0>();
    924}
    925
    926namespace detail
    927{
    928
    930template <class T, class Tuple, size_t... Is>
    931// coverity[autosar_cpp14_a2_10_5_violation] RFD Pending: TID-2053
    932auto makeUniqueFromTuple(const Tuple&& tuple, std::index_sequence<Is...>) -> std::unique_ptr<T>
    933{
    934 // coverity[use_after_move]
    935 return std::make_unique<T>(std::get<Is>(std::move(tuple))...);
    936}
    937}
    938
    940template <typename NodeT, class ConstructorArguments>
    941// coverity[autosar_cpp14_a2_10_5_violation] RFD Pending: TID-2053
    942auto makeUniqueFromTuple(const ConstructorArguments&& constructorArguments) -> std::unique_ptr<NodeT>
    943{
    944 return detail::makeUniqueFromTuple<NodeT>(
    945 std::move(constructorArguments),
    946 std::make_index_sequence<std::tuple_size<std::decay_t<ConstructorArguments>>::value>{});
    947}
    948
    957template <typename NodeT>
    958// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    959auto create(const ParameterProvider& provider) -> std::unique_ptr<NodeT>
    960{
    961 // coverity[autosar_cpp14_a8_5_2_violation]
    962 auto constructorArguments = createConstructorArguments<NodeT>();
    963 populateParameters<NodeT>(constructorArguments, provider);
    964 return makeUniqueFromTuple<NodeT>(std::move(constructorArguments));
    965}
    966
    967// Number of parameters (sum across all constructor arguments)
    968namespace detail
    969{
    970
    972template <
    973 typename NodeT, size_t ConstructorArgumentIndex,
    974 typename std::enable_if_t<ConstructorArgumentIndex == parameterConstructorArgumentSize<NodeT>(), void>* = nullptr>
    975// coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    976constexpr std::size_t parameterSize()
    977{
    978 // coverity[autosar_cpp14_a5_1_1_violation] RFD Accepted: TID-2056
    979 return 0U;
    980}
    981
    983template <
    984 typename NodeT, size_t ConstructorArgumentIndex,
    985 typename std::enable_if_t<ConstructorArgumentIndex<parameterConstructorArgumentSize<NodeT>(), void>* = nullptr>
    986 // coverity[autosar_cpp14_a2_10_5_violation] FP: nvbugs/3907242
    987 constexpr std::size_t parameterSize()
    988{
    989 return constructorArgumentParameterSize<NodeT, ConstructorArgumentIndex>() + parameterSize<NodeT, ConstructorArgumentIndex + 1>();
    990}
    991
    992} // namespace detail
    993
    995template <typename NodeT>
    996// coverity[autosar_cpp14_a2_10_5_violation] RFD Pending: TID-2053
    997constexpr std::size_t parameterSize()
    998{
    999 return detail::parameterSize<NodeT, 0>();
    1000}
    1001
    1002} // namespace framework
    1003} // namespace dw
    1004
    1005#endif // DW_FRAMEWORK_PARAMETERDESCRIPTOR_HPP_
    The interface to access parameter values identified by name and/or (semantic) type.
    constexpr auto describeArrayParameter(dw::core::StringView const &&typeName, dw::core::StringView const &&parameterName, const MemberPointers &&... memberPointers)
    constexpr auto describeArrayParameterWithDefault(dw::core::StringView const &&typeName, dw::core::StringView const &&parameterName, std::array< T, ArraySize > defaultValue, const MemberPointers &&... memberPointers)
    constexpr auto describeUnnamedParameter(dw::core::StringView const &&typeName, const MemberPointers &&... memberPointers) -> ParameterDescriptorT< T, S, false, 0, false, false, MemberPointers... >
    constexpr auto describeUnnamedArrayParameter(dw::core::StringView const &&typeName, const MemberPointers &&... memberPointers)
    constexpr auto describeAbstractParameter(dw::core::StringView const &&typeName, dw::core::StringView const &&parameterName)
    auto makeUniqueFromTuple(const ConstructorArguments &&constructorArguments) -> std::unique_ptr< NodeT >
    Instantiate a node using the passed constructor arguments.
    constexpr auto describeParameter(dw::core::StringView const &&typeName, dw::core::StringView const &&parameterName, const MemberPointers &&... memberPointers) -> ParameterDescriptorT< T, S, false, 0, false, false, MemberPointers... >
    constexpr std::tuple describeConstructorArguments()
    constexpr auto describeConstructorArgument(const Args &&... args) -> dw::core::Tuple< Args... >
    constexpr auto describeIndexParameter(dw::core::StringView const &&typeName, dw::core::StringView const &&parameterName, const MemberPointers &&... memberPointers)
    auto createConstructorArguments()
    Create a tuple of constructor argument needed by the constructor of the passed node.
    void populateParameters(ConstructorArguments &constructorArguments, const ParameterProvider &provider)
    Populate the constructor arguments using values from the parameter provider.
    constexpr auto describeParameterWithDefault(dw::core::StringView const &&typeName, dw::core::StringView const &&parameterName, T defaultValue, const MemberPointers &&... memberPointers) -> ParameterDescriptorWithDefaultT< T, S, false, 0, false, T, MemberPointers... >
    constexpr auto describeParameters()
    Get described parameters for the passed node.
    constexpr std::size_t parameterSize()
    Get the number of parameters for a given node.
    auto create(const ParameterProvider &provider) -> std::unique_ptr< NodeT >
    static constexpr const size_t PARAMETER_CONSTRUCTOR_ARGUMENT_TYPE
    constexpr auto describeAbstractArrayParameter(dw::core::StringView const &&typeName, dw::core::StringView const &&parameterName)
    static constexpr const size_t PARAMETER_CONSTRUCTOR_ARGUMENT_DESCRIPTOR
    Definition: Buffer.hpp:40
    std::tuple< const MemberPointers... > memberPointers
    constexpr ParameterDescriptorT(dw::core::StringView const &&typeName_, dw::core::StringView const &&parameterName_, const MemberPointers &&... memberPointers_)
    constexpr ParameterDescriptorWithDefaultT(dw::core::StringView const &&typeName_, dw::core::StringView const &&parameterName_, const DefaultType &&defaultValue_, const MemberPointers &&... memberPointers_)
    人人超碰97caoporen国产