14 namespace fs = std::filesystem;
16 static constexpr auto ledger_committed_suffix =
".committed";
17 static constexpr auto ledger_start_idx_delimiter =
"_";
18 static constexpr auto ledger_last_idx_delimiter =
"-";
19 static constexpr auto ledger_recovery_file_suffix =
".recovery";
20 static constexpr auto ledger_ignored_file_suffix =
".ignored";
22 static inline size_t get_start_idx_from_file_name(
23 const std::string& file_name)
25 auto pos = file_name.find(ledger_start_idx_delimiter);
26 if (pos == std::string::npos)
28 throw std::logic_error(fmt::format(
29 "Ledger file name {} does not contain a start seqno", file_name));
32 return std::stoull(file_name.substr(pos + 1));
35 static inline std::optional<size_t> get_last_idx_from_file_name(
36 const std::string& file_name)
38 auto pos = file_name.find(ledger_last_idx_delimiter);
39 if (pos == std::string::npos)
45 return std::stoull(file_name.substr(pos + 1));
48 static inline bool is_ledger_file_name_committed(
const std::string& file_name)
50 return file_name.ends_with(ledger_committed_suffix);
53 static inline bool is_ledger_file_name_recovery(
const std::string& file_name)
55 return file_name.ends_with(ledger_recovery_file_suffix);
58 static inline bool is_ledger_file_name_ignored(
const std::string& file_name)
60 return file_name.ends_with(ledger_ignored_file_suffix);
63 static inline bool is_ledger_file_ignored(
const std::string& file_name)
66 return is_ledger_file_name_recovery(file_name) ||
67 is_ledger_file_name_ignored(file_name);
70 static inline fs::path remove_suffix(
71 std::string_view file_name,
const std::string& suffix)
73 if (file_name.ends_with(suffix))
75 file_name.remove_suffix(suffix.size());
80 static inline fs::path remove_recovery_suffix(std::string_view file_name)
82 return remove_suffix(file_name, ledger_recovery_file_suffix);