24#include <unordered_set>
26namespace xrt::auxiliary::util {
29class ExtensionListBuilder;
74 return static_cast<uint32_t
>(ptrs.size());
98 return set.find(str) != set.end();
106 std::vector<std::string> strings;
112 std::unordered_set<std::string_view> set;
118 std::vector<const char *> ptrs;
123 ExtensionList(std::vector<std::string> &&strings_) : strings(std::move(strings_))
125 ptrs.reserve(strings.size());
126 for (
const auto &s : strings) {
128 ptrs.push_back(s.c_str());
148 strings.reserve(capacity);
155 for (
auto &&elt : arr) {
178 if (strings.size() > (std::numeric_limits<uint32_t>::max)() - 1) {
179 throw std::out_of_range(
"Size limit reached");
181 strings.emplace_back(str);
198 if (strings.size() > (std::numeric_limits<uint32_t>::max)() - 1) {
199 throw std::out_of_range(
"Size limit reached");
202 std::find_if(strings.begin(), strings.end(), [str](
const std::string &elt) { return str == elt; });
203 if (it != strings.end()) {
207 strings.emplace_back(str);
246 std::vector<std::string> strings;
A builder for constructing ExtensionList objects.
Definition: u_extension_list.hpp:140
void append(std::string_view str)
Append a new string to the builder.
Definition: u_extension_list.hpp:176
bool appendUnique(std::string_view str)
Append a new string to the builder if it doesn't match any existing string.
Definition: u_extension_list.hpp:196
ExtensionListBuilder(uint32_t capacity)
Construct with capacity hint.
Definition: u_extension_list.hpp:146
ExtensionListBuilder()=default
Default constructor.
ExtensionListBuilder(const char *(&arr)[N])
Construct from an array of strings.
Definition: u_extension_list.hpp:152
void sortForExtensions()
Sort the strings in the builder suitable for extension lists.
Definition: u_extension_list.cpp:265
ExtensionList build() &&
Build and return an immutable ExtensionList.
Definition: u_extension_list.hpp:239
An immutable collection of strings, like a list of extensions to enable.
Definition: u_extension_list.hpp:40
uint32_t size() const noexcept
Get the size of the array (the number of strings)
Definition: u_extension_list.hpp:72
ExtensionList(ExtensionList &&)=default
Move constructor.
ExtensionList()=default
Default constructor - creates an empty list.
bool contains(std::string_view str) const
Check if the string is in the list.
Definition: u_extension_list.hpp:96
ExtensionList & operator=(ExtensionList const &other)
Copy assignment.
Definition: u_extension_list.hpp:57
ExtensionList(ExtensionList const &other)
Copy constructor, makes sure to do a deep copy.
Definition: u_extension_list.hpp:49
ExtensionList & operator=(ExtensionList &&)=default
Move assignment.
const char *const * data() const noexcept
Get the data pointer of the array (array of const char*)
Definition: u_extension_list.hpp:81
A collection of strings, like a list of extensions to enable.