MCPcopy Create free account
hub / github.com/BehaviorTree/BehaviorTree.CPP / hash

Function hash

include/behaviortree_cpp/contrib/json.hpp:6022–6107  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6020*/
6021template<typename BasicJsonType>
6022std::size_t hash(const BasicJsonType& j)
6023{
6024 using string_t = typename BasicJsonType::string_t;
6025 using number_integer_t = typename BasicJsonType::number_integer_t;
6026 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
6027 using number_float_t = typename BasicJsonType::number_float_t;
6028
6029 const auto type = static_cast<std::size_t>(j.type());
6030 switch (j.type())
6031 {
6032 case BasicJsonType::value_t::null:
6033 case BasicJsonType::value_t::discarded:
6034 {
6035 return combine(type, 0);
6036 }
6037
6038 case BasicJsonType::value_t::object:
6039 {
6040 auto seed = combine(type, j.size());
6041 for (const auto& element : j.items())
6042 {
6043 const auto h = std::hash<string_t> {}(element.key());
6044 seed = combine(seed, h);
6045 seed = combine(seed, hash(element.value()));
6046 }
6047 return seed;
6048 }
6049
6050 case BasicJsonType::value_t::array:
6051 {
6052 auto seed = combine(type, j.size());
6053 for (const auto& element : j)
6054 {
6055 seed = combine(seed, hash(element));
6056 }
6057 return seed;
6058 }
6059
6060 case BasicJsonType::value_t::string:
6061 {
6062 const auto h = std::hash<string_t> {}(j.template get_ref<const string_t&>());
6063 return combine(type, h);
6064 }
6065
6066 case BasicJsonType::value_t::boolean:
6067 {
6068 const auto h = std::hash<bool> {}(j.template get<bool>());
6069 return combine(type, h);
6070 }
6071
6072 case BasicJsonType::value_t::number_integer:
6073 {
6074 const auto h = std::hash<number_integer_t> {}(j.template get<number_integer_t>());
6075 return combine(type, h);
6076 }
6077
6078 case BasicJsonType::value_t::number_unsigned:
6079 {

Callers 1

operator()Function · 0.85

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