diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-01-18 20:19:40 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-01-22 15:58:05 +0000 |
commit | c4911f4546ab834a6fd696b434d58cf86e7891d5 (patch) | |
tree | b70d42fbdf0600af8180281f310d787a631fc2c8 /src/libserver/css/css_property.hxx | |
parent | a90d8ba8022dad062548e97947be938ff5ebc60b (diff) | |
download | rspamd-c4911f4546ab834a6fd696b434d58cf86e7891d5.tar.gz rspamd-c4911f4546ab834a6fd696b434d58cf86e7891d5.zip |
[Project] Add hashing method
Diffstat (limited to 'src/libserver/css/css_property.hxx')
-rw-r--r-- | src/libserver/css/css_property.hxx | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/libserver/css/css_property.hxx b/src/libserver/css/css_property.hxx index b3f7262a2..788f4554b 100644 --- a/src/libserver/css/css_property.hxx +++ b/src/libserver/css/css_property.hxx @@ -46,4 +46,24 @@ struct css_property { } -#endif //RSPAMD_CSS_PROPERTY_HXX +/* Make properties hashable */ +namespace std { +template<> +class hash<rspamd::css::css_property> { +public: + /* Mix bits to provide slightly better distribution but being constexpr */ + constexpr size_t operator() (const rspamd::css::css_property &prop) const { + std::size_t key = 0xdeadbeef ^static_cast<std::size_t>(prop.type); + key = (~key) + (key << 21); + key = key ^ (key >> 24); + key = (key + (key << 3)) + (key << 8); + key = key ^ (key >> 14); + key = (key + (key << 2)) + (key << 4); + key = key ^ (key >> 28); + key = key + (key << 31); + return key; + } +}; +} + +#endif //RSPAMD_CSS_PROPERTY_HXX
\ No newline at end of file |