diff --git a/pp/bare_bones/snug_composite.h b/pp/bare_bones/snug_composite.h index 1056b65155..e8526fe41b 100644 --- a/pp/bare_bones/snug_composite.h +++ b/pp/bare_bones/snug_composite.h @@ -708,266 +708,4 @@ class EncodingBimap : public GenericDecodingTable class> class Filament, template class Vector> -class ParallelEncodingBimap : public GenericDecodingTable, Filament, Vector> { - using Base = GenericDecodingTable; - - friend class GenericDecodingTable; - - phmap::parallel_flat_hash_set set_; - - PROMPP_ALWAYS_INLINE void after_items_load_impl(uint32_t first_loaded_id) noexcept { - set_.reserve(Base::items_.size()); - for (auto id = first_loaded_id; id != Base::items_.size(); ++id) { - set_.emplace(typename Base::Proxy(id)); - } - } - - public: - inline __attribute__((always_inline)) ParallelEncodingBimap() noexcept : set_({}, 0, Base::hasher(), Base::equality_comparator()) {} - - ParallelEncodingBimap(const ParallelEncodingBimap&) = delete; - ParallelEncodingBimap(ParallelEncodingBimap&&) = delete; - ParallelEncodingBimap& operator=(const ParallelEncodingBimap&) = delete; - ParallelEncodingBimap& operator=(ParallelEncodingBimap&&) = delete; - - template - inline __attribute__((always_inline)) uint32_t find_or_emplace(const Class& c) noexcept { - return *set_.lazy_emplace(c, [&](const auto& ctor) { - uint32_t id = Base::items_.size(); - Base::items_.emplace_back(Base::data_, c); - ctor(id); - }); - } - - template - inline __attribute__((always_inline)) uint32_t find_or_emplace(const Class& c, size_t hashval) noexcept { - return *set_.lazy_emplace_with_hash(c, phmap::phmap_mix()(hashval), [&](const auto& ctor) { - uint32_t id = Base::items_.size(); - Base::items_.emplace_back(Base::data_, c); - ctor(id); - }); - } - - template - inline __attribute__((always_inline)) std::optional find(const Class& c) const noexcept { - if (auto i = set_.find(c); i != set_.end()) { - return *i; - } - return {}; - } - - template - inline __attribute__((always_inline)) std::optional find(const Class& c, size_t hashval) const noexcept { - if (auto i = set_.find(c, phmap::phmap_mix()(hashval)); i != set_.end()) { - return *i; - } - return {}; - } - - inline __attribute__((always_inline)) void rollback_impl(const typename Base::checkpoint_type& s) noexcept - requires(!Base::kIsReadOnly) - { - assert(s.size() <= Base::items_.size()); - - for (uint32_t i = s.size(); i != Base::items_.size(); ++i) { - set_.erase(typename Base::Proxy(i)); - } - } - - // TODO wrap everything with read/write mutex, and test it! -}; - -template