MCPcopy Create free account
hub / github.com/Open-GD/OpenGD / hash

Function hash

Source/external/json.hpp:5951–6036  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5949*/
5950template<typename BasicJsonType>
5951std::size_t hash(const BasicJsonType& j)
5952{
5953 using string_t = typename BasicJsonType::string_t;
5954 using number_integer_t = typename BasicJsonType::number_integer_t;
5955 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
5956 using number_float_t = typename BasicJsonType::number_float_t;
5957
5958 const auto type = static_cast<std::size_t>(j.type());
5959 switch (j.type())
5960 {
5961 case BasicJsonType::value_t::null:
5962 case BasicJsonType::value_t::discarded:
5963 {
5964 return combine(type, 0);
5965 }
5966
5967 case BasicJsonType::value_t::object:
5968 {
5969 auto seed = combine(type, j.size());
5970 for (const auto& element : j.items())
5971 {
5972 const auto h = std::hash<string_t> {}(element.key());
5973 seed = combine(seed, h);
5974 seed = combine(seed, hash(element.value()));
5975 }
5976 return seed;
5977 }
5978
5979 case BasicJsonType::value_t::array:
5980 {
5981 auto seed = combine(type, j.size());
5982 for (const auto& element : j)
5983 {
5984 seed = combine(seed, hash(element));
5985 }
5986 return seed;
5987 }
5988
5989 case BasicJsonType::value_t::string:
5990 {
5991 const auto h = std::hash<string_t> {}(j.template get_ref<const string_t&>());
5992 return combine(type, h);
5993 }
5994
5995 case BasicJsonType::value_t::boolean:
5996 {
5997 const auto h = std::hash<bool> {}(j.template get<bool>());
5998 return combine(type, h);
5999 }
6000
6001 case BasicJsonType::value_t::number_integer:
6002 {
6003 const auto h = std::hash<number_integer_t> {}(j.template get<number_integer_t>());
6004 return combine(type, h);
6005 }
6006
6007 case BasicJsonType::value_t::number_unsigned:
6008 {

Callers 1

operator()Function · 0.85

Calls 5

combineFunction · 0.85
sizeMethod · 0.80
get_binaryMethod · 0.80
keyMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected