text: /* +------------------------------------------------------------------------+
     |                     Mobile Robot Programming Toolkit (MRPT)            |
     |                          https://www.mrpt.org/                         |
     |                                                                        |
     | Copyright (c) 2005-2020, Individual contributors, see AUTHORS file     |
     | See: https://www.mrpt.org/Authors - All rights reserved.               |
     | Released under BSD License. See: https://www.mrpt.org/License          |
     +------------------------------------------------------------------------+ */
  
  #include "containers-precomp.h"  // Precompiled headers
  
  #include <mrpt/containers/ts_hash_map.h>
  #include <mrpt/core/byte_manip.h>  // MAKEWORD16B(), etc.
  #include <cstdlib>
  #include <cstring>
  
  void mrpt::containers::reduced_hash(
  	const std::string_view& value, uint64_t& out_hash)
  {
  	// dbj2 method:
  	uint64_t hash = 5381;
  	for (auto c : value) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
  	out_hash = hash;
  }
  void mrpt::containers::reduced_hash(
  	const std::string_view& value, uint8_t& out_hash)
  {
  	uint64_t hash;
  	reduced_hash(value, hash);
  	out_hash =
  		((SELBYTE0(hash) ^ SELBYTE1(hash)) ^ SELBYTE2(hash)) ^ SELBYTE3(hash);
  }
  void mrpt::containers::reduced_hash(
  	const std::string_view& value, uint16_t& out_hash)
  {
  	uint64_t hash;
  	reduced_hash(value, hash);
  	out_hash = MAKEWORD16B(
  		SELBYTE0(hash) ^ SELBYTE1(hash), SELBYTE2(hash) ^ SELBYTE3(hash));
  }
  
  void mrpt::containers::reduced_hash(
  	const std::string_view& value, uint32_t& out_hash)
  {
  	uint64_t hash;
  	reduced_hash(value, hash);
  	out_hash = (hash & 0xffffffff) ^ ((hash >> 32) & 0xffffffff);
  }
  