1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 /* Implementations of hash functions. */ 8 9 #include "mozilla/HashFunctions.h" 10 #include "mozilla/Types.h" 11 12 #include <string.h> 13 14 namespace mozilla { 15 HashBytes(const void * aBytes,size_t aLength)16uint32_t HashBytes(const void* aBytes, size_t aLength) { 17 uint32_t hash = 0; 18 const char* b = reinterpret_cast<const char*>(aBytes); 19 20 /* Walk word by word. */ 21 size_t i = 0; 22 for (; i < aLength - (aLength % sizeof(size_t)); i += sizeof(size_t)) { 23 /* Do an explicitly unaligned load of the data. */ 24 size_t data; 25 memcpy(&data, b + i, sizeof(size_t)); 26 27 hash = AddToHash(hash, data, sizeof(data)); 28 } 29 30 /* Get the remaining bytes. */ 31 for (; i < aLength; i++) { 32 hash = AddToHash(hash, b[i]); 33 } 34 return hash; 35 } 36 37 } /* namespace mozilla */ 38