1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_BASE_DJB2_H_ 6 #define MEDIA_BASE_DJB2_H_ 7 8 #include "base/basictypes.h" 9 #include "media/base/media_export.h" 10 11 // DJB2 is a hash algorithm with excellent distribution and speed 12 // on many different sets. 13 // It has marginally more collisions than FNV1, but makes up for it in 14 // performance. 15 // The return value is suitable for table lookups. 16 // For small fixed sizes (ie a pixel), it has low overhead and inlines well. 17 // For large data sets, it optimizes into assembly/simd and is appropriate 18 // for realtime applications. 19 // See Also: 20 // http://www.cse.yorku.ca/~oz/hash.html 21 22 static const uint32 kDJB2HashSeed = 5381u; 23 24 // These functions perform DJB2 hash. The simplest call is DJB2Hash() to 25 // generate the DJB2 hash of the given data: 26 // uint32 hash = DJB2Hash(data1, length1, kDJB2HashSeed); 27 // 28 // You can also compute the DJB2 hash of data incrementally by making multiple 29 // calls to DJB2Hash(): 30 // uint32 hash_value = kDJB2HashSeed; // Initial seed for DJB2. 31 // for (size_t i = 0; i < copy_lines; ++i) { 32 // hash_value = DJB2Hash(source, bytes_per_line, hash_value); 33 // source += source_stride; 34 // } 35 36 // For the given buffer of data, compute the DJB2 hash of 37 // the data. You can call this any number of times during the computation. 38 MEDIA_EXPORT uint32 DJB2Hash(const void* buf, size_t len, uint32 seed); 39 40 #endif // MEDIA_BASE_DJB2_H_ 41 42