Line data Source code
1 : #pragma once 2 : 3 : #include <functional> 4 : 5 : namespace utils::reference_wrapper { 6 : 7 : template<typename T> 8 : struct hash { 9 0 : size_t operator()(const std::reference_wrapper<T> &t) const { 10 0 : return std::hash<T>()(t.get()); 11 : } 12 : }; 13 : 14 : template<typename T> 15 : struct equal_to { 16 0 : bool operator()(const std::reference_wrapper<T> &a, const std::reference_wrapper<T> &b) const { 17 0 : return a.get() == b.get(); 18 : } 19 : }; 20 : 21 : template<typename T> 22 : struct less { 23 : bool operator()(const std::reference_wrapper<T> &a, const std::reference_wrapper<T> &b) const { 24 : return a.get() < b.get(); 25 : } 26 : }; 27 : 28 : template<typename T> 29 : bool operator==(const std::reference_wrapper<T> &a, const std::reference_wrapper<T> &b) { 30 : return a.get() == b.get(); 31 : } 32 : 33 : template<typename T> 34 : bool operator!=(const std::reference_wrapper<T> &a, const std::reference_wrapper<T> &b) { 35 : return !(a == b); 36 : } 37 : 38 : } // namespace utils::reference_wrapper