From 6896b53c280ecd56a0a3e443c8213401c8c1837c Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Sat, 28 Nov 2020 23:19:16 +0100 Subject: [PATCH] metadata_v2: cleanup directory_view --- include/dwarfs/metadata_types.h | 52 +++++++++++++++++++++------------ src/dwarfs/metadata_types.cpp | 4 +-- src/dwarfs/metadata_v2.cpp | 4 +-- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/include/dwarfs/metadata_types.h b/include/dwarfs/metadata_types.h index e942d142..abea5115 100644 --- a/include/dwarfs/metadata_types.h +++ b/include/dwarfs/metadata_types.h @@ -33,38 +33,43 @@ namespace dwarfs { +template +class metadata_; + class entry_view : public ::apache::thrift::frozen::View { using EntryView = ::apache::thrift::frozen::View; using Meta = ::apache::thrift::frozen::MappedFrozen; - public: - entry_view(EntryView ev, Meta const* meta) - : EntryView(ev) - , meta_(meta) {} + template + friend class metadata_; + public: std::string_view name() const; uint16_t mode() const; uint16_t getuid() const; uint16_t getgid() const; private: + entry_view(EntryView ev, Meta const* meta) + : EntryView(ev) + , meta_(meta) {} + Meta const* meta_; }; -class directory_view - : public ::apache::thrift::frozen::View { +class directory_view { using EntryView = ::apache::thrift::frozen::View; using DirView = ::apache::thrift::frozen::View; using Meta = ::apache::thrift::frozen::MappedFrozen; - public: - directory_view(EntryView ev, Meta const* meta) - : EntryView(ev) - , meta_(meta) {} + template + friend class metadata_; + public: + uint32_t inode() const { return entry_.inode(); } uint32_t parent_inode() const; uint32_t first_entry() const; uint32_t entry_count() const; @@ -72,10 +77,15 @@ class directory_view boost::integer_range entry_range() const; private: + directory_view(EntryView ev, Meta const* meta) + : entry_(ev) + , meta_(meta) {} + DirView getdir() const; DirView getdir(uint32_t ino) const; uint32_t entry_count(DirView self) const; + EntryView entry_; Meta const* meta_; }; @@ -85,6 +95,9 @@ class chunk_range { using Meta = ::apache::thrift::frozen::MappedFrozen; + template + friend class metadata_; + public: class iterator : public boost::iterator_facadegids()[group_index()]; } ::apache::thrift::frozen::View directory_view::getdir() const { - return getdir(inode()); + return getdir(entry_.inode()); } ::apache::thrift::frozen::View @@ -52,7 +52,7 @@ uint32_t directory_view::entry_count() const { return entry_count(getdir()); } uint32_t directory_view::entry_count( ::apache::thrift::frozen::View self) const { - auto next = getdir(inode() + 1); + auto next = getdir(entry_.inode() + 1); return next.first_entry() - self.first_entry(); } diff --git a/src/dwarfs/metadata_v2.cpp b/src/dwarfs/metadata_v2.cpp index e11d6562..59fd1d86 100644 --- a/src/dwarfs/metadata_v2.cpp +++ b/src/dwarfs/metadata_v2.cpp @@ -84,6 +84,8 @@ void analyze_frozen(std::ostream& os, const uint16_t READ_ONLY_MASK = ~(S_IWUSR | S_IWGRP | S_IWOTH); +} // namespace + template class metadata_ : public metadata_v2::impl { public: @@ -536,8 +538,6 @@ metadata_::get_chunks(int inode) const { return rv; } -} // namespace - void metadata_v2::get_stat_defaults(struct ::stat* defaults) { ::memset(defaults, 0, sizeof(struct ::stat)); defaults->st_uid = ::geteuid();