4 #include <boost/filesystem.hpp> 5 #include <boost/functional/hash.hpp> 12 FileSetEntryHash::result_type FileSetEntryHash::operator()(FileSetEntryHash::argument_type
const& e)
const {
15 for (; *x !=
'\0'; ++x) {
16 boost::hash_combine(seed, *x);
21 bool FileSetEntryEqual::operator()(
const FileSetEntryEqual::argument_type& lhs,
22 const FileSetEntryEqual::argument_type& rhs)
const {
23 return (0 == strcmp(reinterpret_cast<const char*>(lhs), reinterpret_cast<const char*>(rhs)));
26 std::size_t UpdateFileList(FileList* filelist,
const fs::path& repo_dir_path) {
27 FileList::block_type& block = filelist->getBlock();
28 std::size_t file_count = 0;
29 fs::recursive_directory_iterator repo_dir_it_end, repo_dir_it(repo_dir_path);
30 for (; repo_dir_it != repo_dir_it_end; ++repo_dir_it) {
31 const fs::path& ent_path = repo_dir_it->path();
32 if (fs::is_regular_file(ent_path)) {
33 fs::path rel_path = fs::relative(ent_path, repo_dir_path);
34 std::copy(rel_path.native().begin(), rel_path.native().end(), std::back_inserter(block));
35 block.push_back(
'\0');
42 void UpdateFileUnorderedSet(FileUnorderedSet* file_unordered_set,
const FileList& file_list) {
43 if (!file_list.getBlock().empty()) {
44 auto block_rev_it = file_list.getBlock().rbegin(), p = block_rev_it, block_rev_end_it = file_list.getBlock().rend();
45 for (; block_rev_it != block_rev_end_it; p = block_rev_it) {
46 if ((block_rev_end_it == ++block_rev_it) || (
'\0' == *(block_rev_it))) {
47 file_unordered_set->insert(&*p);