diff options
Diffstat (limited to 'src/utils/cpp')
-rw-r--r-- | src/utils/cpp/TARGETS | 6 | ||||
-rw-r--r-- | src/utils/cpp/path_hash.hpp | 36 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/utils/cpp/TARGETS b/src/utils/cpp/TARGETS index fffb2e7b..73c5e462 100644 --- a/src/utils/cpp/TARGETS +++ b/src/utils/cpp/TARGETS @@ -77,4 +77,10 @@ , "deps": [["@", "gsl", "", "gsl"]] , "stage": ["src", "utils", "cpp"] } +, "path_hash": + { "type": ["@", "rules", "CC", "library"] + , "name": ["path_hash"] + , "hdrs": ["path_hash.hpp"] + , "stage": ["src", "utils", "cpp"] + } } diff --git a/src/utils/cpp/path_hash.hpp b/src/utils/cpp/path_hash.hpp new file mode 100644 index 00000000..b990161c --- /dev/null +++ b/src/utils/cpp/path_hash.hpp @@ -0,0 +1,36 @@ +// Copyright 2023 Huawei Cloud Computing Technology Co., Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef INCLUDED_SRC_UTILS_CPP_PATH_HASH_HPP +#define INCLUDED_SRC_UTILS_CPP_PATH_HASH_HPP + +#include <filesystem> + +#if (defined(__GLIBCXX__) and _GLIBCXX_RELEASE < 12) or \ + (defined(_LIBCPP_VERSION) and _LIBCPP_VERSION < 16000) +// std::hash<std::filesystem::path> is missing for +// - GNU's libstdc++ < 12 +// - LLVM's libcxx < 16 (see https://reviews.llvm.org/D125394) +namespace std { +template <> +struct hash<std::filesystem::path> { + [[nodiscard]] auto operator()( + std::filesystem::path const& ct) const noexcept -> std::size_t { + return std::filesystem::hash_value(ct); + } +}; +} // namespace std +#endif + +#endif // INCLUDED_SRC_UTILS_CPP_PATH_HASH_HPP |