In the middle of multithreading parsers.

This commit is contained in:
zy4n
2025-03-30 22:38:06 +02:00
parent d18b40a7fc
commit 144126ee7a
80 changed files with 2904 additions and 1450 deletions

View File

@@ -9,17 +9,21 @@
#include <type_traits>
#include <algorithm>
#include "opengl/metadata/shader_source_metadata.hpp"
template<typename Char>
assets::shader_source_store_iterator<Char>::shader_source_store_iterator(
id_iterator_type ids,
string_iterator_type strings,
length_iterator_type lengths,
metadata_iterator_type metadata,
std::size_t index,
const offset_type& offset
) :
m_ids{ ids },
m_strings{ strings },
m_lengths{ lengths },
m_metadata{ metadata },
m_index{ index },
m_offset{ offset } {}
@@ -156,25 +160,23 @@ void assets::shader_source_store_iterator<Char>::calc_offset(
}
template<typename Char>
template<std::size_t... Is>
typename assets::shader_source_store_iterator<Char>::reference
assets::shader_source_store_iterator<Char>::dereference(std::index_sequence<Is...>) const
assets::shader_source_store_iterator<Char>::dereference() const
{
return std::make_pair(
m_ids[m_index],
shader_source_view(
m_strings[m_offset],
m_lengths[m_index]
)
shader_source_view{
.source = { m_strings[m_offset], m_lengths[m_index] },
.meta = m_metadata[m_index]
}
);
}
assets::shader_source_store::id_type assets::shader_source_store::add(
const shader_source_id id,
const shader_source_data& shader_source
) {
const auto id = id_type{ m_next_data_id.index++ };
m_ids.push_back(id);
m_strings.reserve(m_strings.size() + shader_source.source.size() + 1);
@@ -183,6 +185,8 @@ assets::shader_source_store::id_type assets::shader_source_store::add(
m_lengths.push_back(shader_source.source.size());
m_metadata.push_back(shader_source.meta);
return id;
}
@@ -229,6 +233,7 @@ void assets::shader_source_store::remove(const iterator_type& it)
m_strings.erase(begin, end);
m_lengths.erase(m_lengths.begin() + it.m_index);
m_metadata.erase(m_metadata.begin() + it.m_index);
}
void assets::shader_source_store::clear()
@@ -236,6 +241,7 @@ void assets::shader_source_store::clear()
m_ids.clear();
m_strings.clear();
m_lengths.clear();
m_metadata.clear();
}
assets::shader_source_store::iterator_type assets::shader_source_store::begin()
@@ -244,6 +250,7 @@ assets::shader_source_store::iterator_type assets::shader_source_store::begin()
m_ids.data(),
m_strings.data(),
m_lengths.data(),
m_metadata.data(),
0,
{}
};
@@ -255,6 +262,7 @@ assets::shader_source_store::iterator_type assets::shader_source_store::end()
m_ids.data(),
m_strings.data(),
m_lengths.data(),
m_metadata.data(),
m_lengths.size(),
m_strings.size()
};
@@ -266,6 +274,7 @@ assets::shader_source_store::const_iterator assets::shader_source_store::begin()
m_ids.data(),
m_strings.data(),
m_lengths.data(),
m_metadata.data(),
0,
{}
};
@@ -277,6 +286,7 @@ assets::shader_source_store::const_iterator assets::shader_source_store::end() c
m_ids.data(),
m_strings.data(),
m_lengths.data(),
m_metadata.data(),
m_lengths.size(),
m_strings.size()
};
@@ -284,20 +294,10 @@ assets::shader_source_store::const_iterator assets::shader_source_store::end() c
assets::shader_source_store::const_iterator assets::shader_source_store::cbegin() const
{
return const_cast<const shader_source_store*>(this)->begin();
return this->begin();
}
assets::shader_source_store::const_iterator assets::shader_source_store::cend() const
{
return const_cast<const shader_source_store*>(this)->end();
}
assets::shader_source_store::view_type assets::shader_source_store::view()
{
return { begin(), end() };
}
assets::shader_source_store::const_view_type assets::shader_source_store::view() const
{
return { begin(), end() };
return this->end();
}