69 , m_directory(directory)
74 info() <<
"FileHashDatabase: nb_write_cache=" << m_nb_write_cache
75 <<
" nb_write=" << m_nb_write <<
" nb_read=" << m_nb_read;
80 void writeValues(
const HashDatabaseWriteArgs& args, HashDatabaseWriteResult& xresult)
override
82 Span<const std::byte> bytes = args.values();
83 String hash_value = args.hashValue();
84 xresult.setHashValueAsString(hash_value);
85 DirFileInfo dirfile_info = _getDirFileInfo(hash_value);
86 String base_name = dirfile_info.directory;
87 String full_filename = dirfile_info.full_filename;
96 std::ifstream ifile(full_filename.localstr(), ios::binary);
105 String full_filename = dirfile_info.full_filename;
106 ofstream ofile(full_filename.localstr(), ios::binary);
111 ARCANE_FATAL(
"Can not write hash for filename '{0}'", full_filename);
115 void readValues(
const HashDatabaseReadArgs& args)
override
117 const String& hash_value = args.hashValueAsString();
118 Span<std::byte> bytes = args.values();
119 DirFileInfo dirfile_info = _getDirFileInfo(hash_value);
121 String full_filename = dirfile_info.full_filename;
123 std::ifstream ifile(full_filename.localstr(), ios::binary);
135 DirFileInfo _getDirFileInfo(
const String& hash_value)
137 char name1 = hash_value.bytes()[0];
138 char name2 = hash_value.bytes()[1];
139 char name3 = hash_value.bytes()[2];
140 StringBuilder base_name_builder = m_directory;
141 base_name_builder +=
'/';
142 base_name_builder += name1;
143 base_name_builder +=
'/';
144 base_name_builder += name2;
145 base_name_builder += name3;
146 String base_name = base_name_builder.toString();
147 String full_filename = String::format(
"{0}/{1}", base_name, hash_value);
148 return DirFileInfo{ base_name, hash_value, full_filename };
154 Int64 m_nb_write_cache = 0;
155 Int64 m_nb_write = 0;