Files
Z3D/include/assets/prefetch_lookups/pose_prefetch_lookup.hpp
2024-12-22 16:58:40 +01:00

59 lines
1.5 KiB
C++

#pragma once
#include <filesystem>
#include <unordered_map>
#include "assets/dynamic_data_stores/dynamic_pose_store.hpp"
#include "util/uix.hpp"
class pose_prefetch_lookup {
public:
using index_type = ztu::u32;
using directory_lookup = std::unordered_map<std::filesystem::path, index_type>;
using directory_iterator = std::pair<directory_lookup::iterator, index_type>;
using index_lookup = std::vector<index_type>;
using index_iterator = index_lookup::iterator;
using lookup_type = std::vector<dynamic_pose_store::id_type>;
using iterator = lookup_type::iterator;
void emplace(
const std::filesystem::path& directory,
index_type index,
dynamic_pose_store::id_type id
);
void emplace_hint_dir(
directory_iterator directory_it,
const std::filesystem::path& directory,
index_type index,
dynamic_pose_store::id_type id
);
void emplace_hint_dir_index(
directory_iterator directory_it,
index_iterator index_it,
index_type index,
dynamic_pose_store::id_type id
);
std::pair<directory_iterator, bool> find_directory(
const std::filesystem::path& directory
);
std::pair<index_iterator, dynamic_pose_store::id_type> find_index(
directory_iterator directory_it,
index_type index
);
protected:
directory_iterator emplace_dir(
directory_iterator directory_it,
const std::filesystem::path& directory
);
private:
directory_lookup m_directory_lookup;
index_lookup m_directory_indices; // count before indices, indices sorted per dir
lookup_type m_pose_ids; // offset by 1
};