12 STORM_LOG_ASSERT(stringMapping.size() > 0,
"StringMapping CSR must not be empty.");
13 auto const numEntries = stringMapping.size() - 1;
14 return std::ranges::iota_view(0ull, numEntries) | std::ranges::views::transform([&strings, &stringMapping](
auto i) -> std::string_view {
15 return std::string_view(strings.data() + stringMapping[i], stringMapping[i + 1] - stringMapping[i]);
20 STORM_LOG_ASSERT(!stringMapping.has_value() || std::ranges::size(stringMapping.value()) > 0,
"StringMapping CSR must not be empty.");
21 STORM_LOG_ASSERT(stringMapping.has_value() == strings.has_value(),
"StringMapping must be present iff strings is present.");
22 auto const numEntries = stringMapping.has_value() ? std::ranges::size(stringMapping.value()) - 1 : 0;
23 return std::ranges::iota_view(0ull, numEntries) | std::ranges::views::transform([&strings, &stringMapping](
auto i) -> std::string_view {
25 STORM_LOG_ASSERT(strings.has_value(),
"Expected strings to be present if there are entries in the string mapping.");
26 return std::string_view(strings->data() + stringMapping.value()[i], stringMapping.value()[i + 1] - stringMapping.value()[i]);
33 if (stringMapping.empty()) {
34 stringMapping.push_back(0);
36 STORM_LOG_ASSERT(stringMapping.front() == 0,
"String mapping CSR must start with 0.");
37 STORM_LOG_ASSERT(stringMapping.back() == strings.size(),
"String mapping CSR must end with the size of the strings.");
41 strings.reserve(strings.size() + numStrings * 10);
42 stringMapping.reserve(stringMapping.size() + numStrings);
45 std::string_view
at(uint64_t index)
const {
46 STORM_LOG_ASSERT(index + 1 < stringMapping.size(),
"String index out of bounds.");
47 return std::string_view(strings.data() + stringMapping[index], stringMapping[index + 1] - stringMapping[index]);
51 return stringMapping.size() - 1;
59 strings.insert(strings.end(), str.begin(), str.end());
60 stringMapping.push_back(strings.size());
69 auto const numStrings = stringMapping.size() - 1;
70 for (uint64_t i = 0; i < numStrings; ++i) {
80 STORM_LOG_ASSERT(stringMapping.back() == strings.size(),
"Final string mapping does not match string size.");
81 strings.shrink_to_fit();
82 stringMapping.shrink_to_fit();
87 typename CSR::value_type& stringMapping;
uint64_t findOrPushBack(std::string_view str)
If the given string already exists, returns its index.
std::string_view at(uint64_t index) const
void reserve(uint64_t numStrings)
uint64_t push_back(std::string_view str)
inserts the string at the end of the vector and returns its index
StringsBuilder(typename SEQ< char >::value_type &strings, typename CSR::value_type &stringMapping)
#define STORM_LOG_ASSERT(cond, message)
Import and export of umb files.
OptionalVectorType< uint64_t > CSR
auto stringVectorView(SEQ< char >::value_type const &strings, CSR::value_type const &stringMapping)