]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Improve smart hash helper
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 15 Jun 2021 13:36:14 +0000 (14:36 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 15 Jun 2021 13:36:14 +0000 (14:36 +0100)
src/libutil/cxx/util.hxx

index 3eeb6d20d96931bb85a32e0e291d581d0702f8ce..fa9aa180249c3684b86809ad494a0587b7468a11 100644 (file)
@@ -31,7 +31,7 @@ namespace rspamd {
  * Transparent smart pointers hashing
  */
 template<typename T>
-struct shared_ptr_equal {
+struct smart_ptr_equal {
        using is_transparent = void; /* We want to find values in a set of shared_ptr by reference */
        auto operator()(const std::shared_ptr<T> &a, const std::shared_ptr<T> &b) const {
                return (*a) == (*b);
@@ -42,14 +42,26 @@ struct shared_ptr_equal {
        auto operator()(const T &a, const std::shared_ptr<T> &b) const {
                return a == (*b);
        }
+       auto operator()(const std::unique_ptr<T> &a, const std::unique_ptr<T> &b) const {
+               return (*a) == (*b);
+       }
+       auto operator()(const std::unique_ptr<T> &a, const T &b) const {
+               return (*a) == b;
+       }
+       auto operator()(const T &a, const std::unique_ptr<T> &b) const {
+               return a == (*b);
+       }
 };
 
 template<typename T>
-struct shared_ptr_hash {
+struct smart_ptr_hash {
        using is_transparent = void; /* We want to find values in a set of shared_ptr by reference */
        auto operator()(const std::shared_ptr<T> &a) const {
                return std::hash<T>()(*a);
        }
+       auto operator()(const std::unique_ptr<T> &a) const {
+               return std::hash<T>()(*a);
+       }
        auto operator()(const T &a) const {
                return std::hash<T>()(a);
        }