+// SPDX-FileCopyrightText: 2009-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+//
+// SPDX-License-Identifier: MIT
+
#ifndef _JHASH_H
#define _JHASH_H
+#if defined(__FreeBSD__)
+#include <sys/endian.h>
+#endif
+
/*
- * jhash.h
- *
* Example hash function.
- *
- * Copyright 2009-2012 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- *
- * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
- * OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
- *
- * Permission is hereby granted to use or copy this program for any
- * purpose, provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is
- * granted, provided the above notices are retained, and a notice that
- * the code was modified is included with the above copyright notice.
*/
/*
* rest of the string. Every machine with memory protection I've seen
* does it on word boundaries, so is OK with this. But VALGRIND will
* still catch it and complain. The masking trick does make the hash
- * noticably faster for short strings (like English words).
+ * noticeably faster for short strings (like English words).
*/
#ifndef VALGRIND
/*-------------------------------- last block: affect all 32 bits of (c) */
switch (length) { /* all the case statements fall through */
- case 12: c+=((uint32_t) k[11])<<24;
- case 11: c+=((uint32_t) k[10])<<16;
- case 10: c+=((uint32_t) k[9])<<8;
- case 9 : c+=k[8];
- case 8 : b+=((uint32_t) k[7])<<24;
- case 7 : b+=((uint32_t) k[6])<<16;
- case 6 : b+=((uint32_t) k[5])<<8;
- case 5 : b+=k[4];
- case 4 : a+=((uint32_t) k[3])<<24;
- case 3 : a+=((uint32_t) k[2])<<16;
- case 2 : a+=((uint32_t) k[1])<<8;
+ case 12: c+=((uint32_t) k[11])<<24; /* fall through */
+ case 11: c+=((uint32_t) k[10])<<16; /* fall through */
+ case 10: c+=((uint32_t) k[9])<<8; /* fall through */
+ case 9 : c+=k[8]; /* fall through */
+ case 8 : b+=((uint32_t) k[7])<<24; /* fall through */
+ case 7 : b+=((uint32_t) k[6])<<16; /* fall through */
+ case 6 : b+=((uint32_t) k[5])<<8; /* fall through */
+ case 5 : b+=k[4]; /* fall through */
+ case 4 : a+=((uint32_t) k[3])<<24; /* fall through */
+ case 3 : a+=((uint32_t) k[2])<<16; /* fall through */
+ case 2 : a+=((uint32_t) k[1])<<8; /* fall through */
case 1 : a+=k[0];
break;
case 0 : return c;