| 918 | } |
| 919 | |
| 920 | inline std::size_t hash_append(std::size_t seed, value const & v) |
| 921 | { |
| 922 | using detail::hash_combine_; |
| 923 | |
| 924 | std::size_t const kind_hash = std::hash<size_t>{}(size_t(v.kind())); |
| 925 | switch (v.kind()) { |
| 926 | case value_kind::object: return hash_append(kind_hash, get<object>(v)); |
| 927 | case value_kind::array: return hash_append(kind_hash, get<array>(v)); |
| 928 | case value_kind::number: |
| 929 | return hash_combine_( |
| 930 | kind_hash, std::hash<double>{}(get<double>(v))); |
| 931 | case value_kind::string: |
| 932 | return hash_combine_( |
| 933 | kind_hash, |
| 934 | std::hash<std::string_view>{}(get<std::string_view>(v))); |
| 935 | case value_kind::boolean: |
| 936 | return hash_combine_(kind_hash, std::hash<bool>{}(get<bool>(v))); |
| 937 | case value_kind::null: return kind_hash; |
| 938 | } |
| 939 | |
| 940 | assert(!"Unreachable"); |
| 941 | return 0; |
| 942 | } |
| 943 | |
| 944 | inline std::size_t hash_append(std::size_t seed, object const & o) |
| 945 | { |
no test coverage detected