Upgrade clang-format to version 15 (#6859)
This commit is contained in:
@@ -46,31 +46,36 @@ template <typename Key, typename Value> struct CSVFilesParser
|
||||
{
|
||||
tbb::spin_mutex mutex;
|
||||
std::vector<std::pair<Key, Value>> lookup;
|
||||
tbb::parallel_for(std::size_t{0}, csv_filenames.size(), [&](const std::size_t idx) {
|
||||
auto local = ParseCSVFile(csv_filenames[idx], start_index + idx);
|
||||
tbb::parallel_for(std::size_t{0},
|
||||
csv_filenames.size(),
|
||||
[&](const std::size_t idx)
|
||||
{
|
||||
auto local = ParseCSVFile(csv_filenames[idx], start_index + idx);
|
||||
|
||||
{ // Merge local CSV results into a flat global vector
|
||||
tbb::spin_mutex::scoped_lock _{mutex};
|
||||
lookup.insert(end(lookup),
|
||||
std::make_move_iterator(begin(local)),
|
||||
std::make_move_iterator(end(local)));
|
||||
}
|
||||
});
|
||||
{ // Merge local CSV results into a flat global vector
|
||||
tbb::spin_mutex::scoped_lock _{mutex};
|
||||
lookup.insert(end(lookup),
|
||||
std::make_move_iterator(begin(local)),
|
||||
std::make_move_iterator(end(local)));
|
||||
}
|
||||
});
|
||||
|
||||
// With flattened map-ish view of all the files, make a stable sort on key and source
|
||||
// and unique them on key to keep only the value with the largest file index
|
||||
// and the largest line number in a file.
|
||||
// The operands order is swapped to make descending ordering on (key, source)
|
||||
tbb::parallel_sort(begin(lookup), end(lookup), [](const auto &lhs, const auto &rhs) {
|
||||
return std::tie(rhs.first, rhs.second.source) <
|
||||
std::tie(lhs.first, lhs.second.source);
|
||||
});
|
||||
tbb::parallel_sort(begin(lookup),
|
||||
end(lookup),
|
||||
[](const auto &lhs, const auto &rhs) {
|
||||
return std::tie(rhs.first, rhs.second.source) <
|
||||
std::tie(lhs.first, lhs.second.source);
|
||||
});
|
||||
|
||||
// Unique only on key to take the source precedence into account and remove duplicates.
|
||||
const auto it =
|
||||
std::unique(begin(lookup), end(lookup), [](const auto &lhs, const auto &rhs) {
|
||||
return lhs.first == rhs.first;
|
||||
});
|
||||
const auto it = std::unique(begin(lookup),
|
||||
end(lookup),
|
||||
[](const auto &lhs, const auto &rhs)
|
||||
{ return lhs.first == rhs.first; });
|
||||
lookup.erase(it, end(lookup));
|
||||
|
||||
util::Log() << "In total loaded " << csv_filenames.size() << " file(s) with a total of "
|
||||
|
||||
@@ -15,10 +15,11 @@ template <typename Key, typename Value> struct LookupTable
|
||||
boost::optional<Value> operator()(const Key &key) const
|
||||
{
|
||||
using Result = boost::optional<Value>;
|
||||
const auto it = std::lower_bound(
|
||||
lookup.begin(), lookup.end(), key, [](const auto &lhs, const auto &rhs) {
|
||||
return rhs < lhs.first;
|
||||
});
|
||||
const auto it =
|
||||
std::lower_bound(lookup.begin(),
|
||||
lookup.end(),
|
||||
key,
|
||||
[](const auto &lhs, const auto &rhs) { return rhs < lhs.first; });
|
||||
return it != std::end(lookup) && !(it->first < key) ? Result(it->second) : Result();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user