1 #ifndef fhiclcpp_types_OptionalSequence_h 2 #define fhiclcpp_types_OptionalSequence_h 17 #include <type_traits> 26 template <
typename T, std::size_t N = -1ull>
27 class OptionalSequence final :
public detail::SequenceBase,
28 private detail::RegisterIfTableMember {
34 using ftype = std::array<std::shared_ptr<tt::fhicl_type<T>>, N>;
41 std::function<
bool()> maybeUse);
51 value_, result.begin(), [](
auto const& elem) {
return (*elem)(); });
94 bool const trimParents)
override;
100 template <
typename T>
109 using ftype = std::vector<std::shared_ptr<tt::fhicl_type<T>>>;
116 std::function<
bool()> maybeUse);
146 if (n < value_.size()) {
148 }
else if (n > value_.size()) {
157 std::size_t
const pos =
158 key_fragment.find(current_stem) != std::string::npos ?
159 current_stem.size() + 1ul :
161 key_fragment.replace(0ul, pos,
"");
164 for (
auto i = value_.size();
i !=
n; ++
i) {
174 return value_.size();
192 bool const trimParents)
override;
203 template <
typename T, std::
size_t N>
208 template <
typename T, std::
size_t N>
218 for (std::size_t
i{};
i != N; ++
i) {
225 template <
typename T, std::
size_t N>
228 std::function<
bool()> maybeUse)
237 for (std::size_t
i{};
i != N; ++
i) {
244 template <
typename T, std::
size_t N>
261 template <
typename T>
266 template <
typename T>
279 template <
typename T>
282 std::function<
bool()> maybeUse)
294 template <
typename T>
void do_prepare_elements_for_validation(std::size_t const n) override
static NameStackRegistry & instance()
std::array< tt::return_type< T >, N > value_type
#define NO_DELEGATED_PARAMETERS
void check_nargs_for_bounded_sequences(std::string const &key, std::size_t expected, std::size_t provided)
void do_walk_elements(detail::ParameterWalker< tt::const_flavor::require_non_const > &pw) override
bool hasValue() const noexcept
std::size_t get_size() const noexcept override
#define NO_OPTIONAL_TYPES
static void end_of_ctor()
std::function< bool()> AlwaysUse()
SequenceBase(Name &&name, Comment &&comment, par_style const vt, par_type const type, std::function< bool()> maybeUse)
std::array< std::shared_ptr< tt::fhicl_type< T >>, N > ftype
void walk_over(tt::maybe_const_t< ParameterBase, C > &)
RegisterIfTableMember(ParameterBase *pb)
typename fhicl_type_impl< T >::type fhicl_type
void do_set_value(fhicl::ParameterSet const &, bool const trimParents) override
bool operator()(value_type &t) const
void do_prepare_elements_for_validation(std::size_t const n) override
bool hasValue() const noexcept
auto transform_all(Container &, OutputIt, UnaryOp)
void do_walk_elements(detail::ParameterWalker< tt::const_flavor::require_const > &pw) const override
#define NO_NESTED_TABLE_FRAGMENTS
void do_walk_elements(detail::ParameterWalker< tt::const_flavor::require_non_const > &pw) override
bool operator()(value_type &t) const
std::string const & key() const
static Name sequence_element(std::size_t const i)
void do_walk_elements(detail::ParameterWalker< tt::const_flavor::require_const > &pw) const override
auto for_all(FwdCont &, Func)
std::string const & comment() const
std::vector< tt::return_type< T >> value_type
typename return_type_impl< ARGS... >::value_type return_type
std::vector< std::shared_ptr< tt::fhicl_type< T >>> ftype
std::size_t get_size() const noexcept override
OptionalSequence(Name &&name)