// slang-name-value.cpp #include "slang-name-value.h" #include "slang-string-util.h" #include "slang-char-util.h" namespace Slang { /* static */ValueInt NameValueUtil::findValue(const ConstArrayView& opts, const UnownedStringSlice& slice, ValueInt defaultValue) { for (const auto& opt : opts) { if (UnownedStringSlice(opt.name) == slice) { return opt.value; } } return defaultValue; } /* static */ValueInt NameValueUtil::findValue(const ConstArrayView& opts, const UnownedStringSlice& slice, ValueInt defaultValue) { for (const auto& opt : opts) { UnownedStringSlice names(opt.names); if (StringUtil::indexOfInSplit(names, ',', slice) >= 0) { return opt.value; } } return defaultValue; } /* static */ValueInt NameValueUtil::findValue(const ConstArrayView& opts, const UnownedStringSlice& slice, ValueInt defaultValue) { for (const auto& opt : opts) { UnownedStringSlice names(opt.names); if (StringUtil::indexOfInSplit(names, ',', slice) >= 0) { return opt.value; } } return defaultValue; } /* static */ UnownedStringSlice NameValueUtil::findName(const ConstArrayView& opts, ValueInt value, const UnownedStringSlice& defaultName) { for (const auto& opt : opts) { if (opt.value == value) { return UnownedStringSlice(opt.name); } } return defaultName; } /* static */ UnownedStringSlice NameValueUtil::findName(const ConstArrayView& opts, ValueInt value, const UnownedStringSlice& defaultName) { for (const auto& opt : opts) { if (opt.value == value) { // Get the first name return StringUtil::getAtInSplit(UnownedStringSlice(opt.names), ',', 0); } } return defaultName; } /* static */ UnownedStringSlice NameValueUtil::findName(const ConstArrayView& opts, ValueInt value, const UnownedStringSlice& defaultName) { for (const auto& opt : opts) { if (opt.value == value) { // Get the first name return StringUtil::getAtInSplit(UnownedStringSlice(opt.names), ',', 0); } } return defaultName; } /* static */UnownedStringSlice NameValueUtil::findDescription(const ConstArrayView& opts, ValueInt value, const UnownedStringSlice& defaultDescription) { for (const auto& opt : opts) { if (opt.value == value && opt.description) { return UnownedStringSlice(opt.description); } } return defaultDescription; } /* static */ void NameValueUtil::appendNames(NameKind kind, const ConstArrayView& opts, List& out) { SLANG_UNUSED(kind); for (auto& opt : opts) { out.add(UnownedStringSlice(opt.name)); } } static void _appendNames(NameValueUtil::NameKind kind, const char* names, List& out) { if (kind == NameValueUtil::NameKind::All) { StringUtil::appendSplit(UnownedStringSlice(names), ',', out); } else { out.add(StringUtil::getAtInSplit(UnownedStringSlice(names), ',', 0)); } } /* static */ void NameValueUtil::appendNames(NameKind kind, const ConstArrayView& opts, List& out) { for (auto& opt : opts) { _appendNames(kind, opt.names, out); } } /* static */ void NameValueUtil::appendNames(NameKind kind, const ConstArrayView& opts, List& out) { for (auto& opt : opts) { _appendNames(kind, opt.names, out); } } /* static */ List NameValueUtil::getNames(NameKind kind, const ConstArrayView& opts) { List names; appendNames(kind, opts, names); return names; } /* static */ List NameValueUtil::getNames(NameKind kind, const ConstArrayView& opts) { List names; appendNames(kind, opts, names); return names; } /* static */ List NameValueUtil::getNames(NameKind kind, const ConstArrayView& opts) { List names; appendNames(kind, opts, names); return names; } } // namespace Slang