MCPcopy Create free account
hub / github.com/InteractiveComputerGraphics/SPlisHSPlasH / hash

Function hash

extern/json/json.hpp:5955–6040  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 1

operator()Function · 0.70

Calls 6

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

Tested by

no test coverage detected