clang-format: no single-line case
[awesomized/libmemcached] / src / libhashkit / one_at_a_time.cc
1 /*
2 +--------------------------------------------------------------------+
3 | libmemcached - C/C++ Client Library for memcached |
4 +--------------------------------------------------------------------+
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted under the terms of the BSD license. |
7 | You should have received a copy of the license in a bundled file |
8 | named LICENSE; in case you did not receive a copy you can review |
9 | the terms online at: https://opensource.org/licenses/BSD-3-Clause |
10 +--------------------------------------------------------------------+
11 | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ |
12 | Copyright (c) 2020 Michael Wallner <mike@php.net> |
13 +--------------------------------------------------------------------+
14 */
15
16 #include "libhashkit/common.h"
17
18 uint32_t hashkit_one_at_a_time(const char *key, size_t key_length, void *context) {
19 const char *ptr = key;
20 uint32_t value = 0;
21 (void) context;
22
23 while (key_length--) {
24 uint32_t val = (uint32_t) *ptr++;
25 value += val;
26 value += (value << 10);
27 value ^= (value >> 6);
28 }
29 value += (value << 3);
30 value ^= (value >> 11);
31 value += (value << 15);
32
33 return value;
34 }