4#include <initializer_list>
11template <std::
size_t Max = 8>
13 std::array<std::string_view, Max>
values{};
17 constexpr NameList(std::initializer_list<std::string_view> names) {
18 if (names.size() > Max) {
19 throw "cli::NameList capacity exceeded";
22 auto it = names.begin();
23 for (std::size_t i = 0; i <
size; ++i, ++it) {
28 [[nodiscard]]
constexpr auto begin()
const {
return values.begin(); }
29 [[nodiscard]]
constexpr auto end()
const {
return values.begin() +
size; }
30 [[nodiscard]]
constexpr auto empty() const ->
bool {
return size == 0; }
53template <
class... Relations>
61template <
class... Relations>
68 return {.name = params.name, .members = params.members};
71[[nodiscard]]
constexpr auto conflicts(std::string_view left,
72 std::string_view right)
74 return {.left = left, .right = right};
77[[nodiscard]]
constexpr auto depends_on(std::string_view source,
78 std::string_view target)
80 return {.source = source, .target = target};
83template <
class... Relations>
84[[nodiscard]]
constexpr auto relations(Relations... rels)
86 return {.items = std::tuple<Relations...>{rels...}};
constexpr auto group(GroupParams params) -> GroupRelation
constexpr auto conflicts(std::string_view left, std::string_view right) -> ConflictsRelation
constexpr auto relations(Relations... rels) -> RelationSet< Relations... >
constexpr auto depends_on(std::string_view source, std::string_view target) -> DependsOnRelation
constexpr NameList(std::initializer_list< std::string_view > names)
constexpr auto begin() const
constexpr auto end() const
std::array< std::string_view, Max > values
constexpr NameList()=default
constexpr auto empty() const -> bool
std::tuple< Relations... > items