1/*
2 * Copyright 2002-2013, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Copyright 2001, Travis Geiselbrecht. All rights reserved.
6 * Distributed under the terms of the NewOS License.
7 */
8
9
10#include <util/StringHash.h>
11
12
13uint32
14hash_hash_string(const char* string)
15{
16	uint32 hash = 0;
17	char c;
18
19	// we assume hash to be at least 32 bits
20	while ((c = *string++) != 0) {
21		hash ^= hash >> 28;
22		hash <<= 4;
23		hash ^= c;
24	}
25
26	return hash;
27}
28
29
30uint32
31hash_hash_string_part(const char* string, size_t maxLength)
32{
33	uint32 hash = 0;
34	char c;
35
36	// we assume hash to be at least 32 bits
37	while (maxLength-- > 0 && (c = *string++) != 0) {
38		hash ^= hash >> 28;
39		hash <<= 4;
40		hash ^= c;
41	}
42
43	return hash;
44}
45