mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-09 12:28:13 -04:00
metadata_v2: cleanup global_entry_data
This commit is contained in:
parent
6896b53c28
commit
e31f9000ce
@ -28,17 +28,59 @@
|
||||
|
||||
namespace dwarfs {
|
||||
|
||||
// TODO: clean up
|
||||
class global_entry_data {
|
||||
public:
|
||||
global_entry_data(bool no_time)
|
||||
: no_time_(no_time) {}
|
||||
|
||||
void add_uid(uint16_t uid) { add(uid, uids, next_uid_index); }
|
||||
void add_uid(uint16_t uid) { add(uid, uids_, next_uid_index_); }
|
||||
void add_gid(uint16_t gid) { add(gid, gids_, next_gid_index_); }
|
||||
void add_mode(uint16_t mode) { add(mode, modes_, next_mode_index_); }
|
||||
|
||||
void add_gid(uint16_t gid) { add(gid, gids, next_gid_index); }
|
||||
void add_time(uint64_t time) {
|
||||
if (time < timestamp_base_) {
|
||||
timestamp_base_ = time;
|
||||
}
|
||||
}
|
||||
|
||||
void add_mode(uint16_t mode) { add(mode, modes, next_mode_index); }
|
||||
void add_name(std::string const& name) { names_.emplace(name, 0); }
|
||||
void add_link(std::string const& link) { links_.emplace(link, 0); }
|
||||
|
||||
void index() {
|
||||
index(names_);
|
||||
index(links_);
|
||||
}
|
||||
|
||||
uint16_t get_uid_index(uint16_t uid) const { return uids_.at(uid); }
|
||||
uint16_t get_gid_index(uint16_t gid) const { return gids_.at(gid); }
|
||||
uint16_t get_mode_index(uint16_t mode) const { return modes_.at(mode); }
|
||||
|
||||
uint32_t get_name_index(std::string const& name) const {
|
||||
return names_.at(name);
|
||||
}
|
||||
|
||||
uint32_t get_link_index(std::string const& link) const {
|
||||
return links_.at(link);
|
||||
}
|
||||
|
||||
uint64_t get_time_offset(uint64_t time) const {
|
||||
return no_time_ ? 0 : time - timestamp_base_;
|
||||
}
|
||||
|
||||
std::vector<uint16_t> get_uids() const;
|
||||
std::vector<uint16_t> get_gids() const;
|
||||
std::vector<uint16_t> get_modes() const;
|
||||
|
||||
std::vector<std::string> get_names() const;
|
||||
std::vector<std::string> get_links() const;
|
||||
|
||||
uint64_t get_timestamp_base() const { return timestamp_base_; }
|
||||
|
||||
private:
|
||||
template <typename T, typename U>
|
||||
std::vector<T> get_vector(std::unordered_map<T, U> const& map) const;
|
||||
|
||||
static void index(std::unordered_map<std::string, uint32_t>& map);
|
||||
|
||||
void add(uint16_t val, std::unordered_map<uint16_t, uint16_t>& map,
|
||||
uint16_t& next_index) {
|
||||
@ -47,64 +89,15 @@ class global_entry_data {
|
||||
}
|
||||
}
|
||||
|
||||
void add_time(uint64_t time) {
|
||||
if (time < timestamp_base) {
|
||||
timestamp_base = time;
|
||||
}
|
||||
}
|
||||
|
||||
void add_name(std::string const& name) { names.emplace(name, 0); }
|
||||
|
||||
void add_link(std::string const& link) { links.emplace(link, 0); }
|
||||
|
||||
void index() {
|
||||
index(names);
|
||||
index(links);
|
||||
}
|
||||
|
||||
void index(std::unordered_map<std::string, uint32_t>& map);
|
||||
|
||||
uint16_t get_uid_index(uint16_t uid) const { return uids.at(uid); }
|
||||
|
||||
uint16_t get_gid_index(uint16_t gid) const { return gids.at(gid); }
|
||||
|
||||
uint16_t get_mode_index(uint16_t mode) const { return modes.at(mode); }
|
||||
|
||||
uint32_t get_name_index(std::string const& name) const {
|
||||
return names.at(name);
|
||||
}
|
||||
|
||||
uint32_t get_link_index(std::string const& link) const {
|
||||
return links.at(link);
|
||||
}
|
||||
|
||||
uint64_t get_time_offset(uint64_t time) const {
|
||||
return no_time_ ? 0 : time - timestamp_base;
|
||||
}
|
||||
|
||||
std::vector<uint16_t> get_uids() const;
|
||||
|
||||
std::vector<uint16_t> get_gids() const;
|
||||
|
||||
std::vector<uint16_t> get_modes() const;
|
||||
|
||||
std::vector<std::string> get_names() const;
|
||||
|
||||
std::vector<std::string> get_links() const;
|
||||
|
||||
// TODO: make private
|
||||
template <typename T, typename U>
|
||||
std::vector<T> get_vector(std::unordered_map<T, U> const& map) const;
|
||||
|
||||
std::unordered_map<uint16_t, uint16_t> uids;
|
||||
std::unordered_map<uint16_t, uint16_t> gids;
|
||||
std::unordered_map<uint16_t, uint16_t> modes;
|
||||
std::unordered_map<std::string, uint32_t> names;
|
||||
std::unordered_map<std::string, uint32_t> links;
|
||||
uint16_t next_uid_index{0};
|
||||
uint16_t next_gid_index{0};
|
||||
uint16_t next_mode_index{0};
|
||||
uint64_t timestamp_base{std::numeric_limits<uint64_t>::max()};
|
||||
std::unordered_map<uint16_t, uint16_t> uids_;
|
||||
std::unordered_map<uint16_t, uint16_t> gids_;
|
||||
std::unordered_map<uint16_t, uint16_t> modes_;
|
||||
std::unordered_map<std::string, uint32_t> names_;
|
||||
std::unordered_map<std::string, uint32_t> links_;
|
||||
uint16_t next_uid_index_{0};
|
||||
uint16_t next_gid_index_{0};
|
||||
uint16_t next_mode_index_{0};
|
||||
uint64_t timestamp_base_{std::numeric_limits<uint64_t>::max()};
|
||||
bool no_time_;
|
||||
};
|
||||
|
||||
|
@ -35,23 +35,23 @@ global_entry_data::get_vector(std::unordered_map<T, U> const& map) const {
|
||||
}
|
||||
|
||||
std::vector<uint16_t> global_entry_data::get_uids() const {
|
||||
return get_vector(uids);
|
||||
return get_vector(uids_);
|
||||
}
|
||||
|
||||
std::vector<uint16_t> global_entry_data::get_gids() const {
|
||||
return get_vector(gids);
|
||||
return get_vector(gids_);
|
||||
}
|
||||
|
||||
std::vector<uint16_t> global_entry_data::get_modes() const {
|
||||
return get_vector(modes);
|
||||
return get_vector(modes_);
|
||||
}
|
||||
|
||||
std::vector<std::string> global_entry_data::get_names() const {
|
||||
return get_vector(names);
|
||||
return get_vector(names_);
|
||||
}
|
||||
|
||||
std::vector<std::string> global_entry_data::get_links() const {
|
||||
return get_vector(links);
|
||||
return get_vector(links_);
|
||||
}
|
||||
|
||||
void global_entry_data::index(std::unordered_map<std::string, uint32_t>& map) {
|
||||
|
@ -467,7 +467,7 @@ void scanner_<LoggerPolicy>::scan(filesystem_writer& fsw,
|
||||
mv2.modes = ge_data.get_modes();
|
||||
mv2.names = ge_data.get_names();
|
||||
mv2.links = ge_data.get_links();
|
||||
mv2.timestamp_base = ge_data.timestamp_base;
|
||||
mv2.timestamp_base = ge_data.get_timestamp_base();
|
||||
mv2.chunk_index_offset = first_file_inode;
|
||||
mv2.block_size = UINT32_C(1) << cfg_.block_size_bits;
|
||||
mv2.total_fs_size = prog.original_size;
|
||||
|
Loading…
x
Reference in New Issue
Block a user