diff options
author | fbarchard@chromium.org <fbarchard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-09 09:51:37 +0000 |
---|---|---|
committer | fbarchard@chromium.org <fbarchard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-09 09:51:37 +0000 |
commit | 7f5dfbf327c9f19e9b739e81c1c1f6b11d47d4b5 (patch) | |
tree | 770e39008e4d6d18f35ae76a98a970116da3264b /media/base/djb2.h | |
parent | ef1f6d8071ed54a6126d2a963feef8d37283cbff (diff) | |
download | chromium_src-7f5dfbf327c9f19e9b739e81c1c1f6b11d47d4b5.zip chromium_src-7f5dfbf327c9f19e9b739e81c1c1f6b11d47d4b5.tar.gz chromium_src-7f5dfbf327c9f19e9b739e81c1c1f6b11d47d4b5.tar.bz2 |
DJB2 Hash for applications where high speed hash or checksum values are needed.
BUG=21126
TEST=djb2_unittest.cc has a quick test. will replace versions in media unittests and media_bench in future.
Review URL: http://codereview.chromium.org/193028
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28532 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/djb2.h')
-rw-r--r-- | media/base/djb2.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/media/base/djb2.h b/media/base/djb2.h new file mode 100644 index 0000000..2b696fa --- /dev/null +++ b/media/base/djb2.h @@ -0,0 +1,40 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_BASE_DJB2_H_ +#define MEDIA_BASE_DJB2_H_ + +#include "base/basictypes.h" + +// DJB2 is a hash algorithm with excellent distribution and speed +// on many different sets. +// It has marginally more collisions than FNV1, but makes up for it in +// performance. +// The return value is suitable for table lookups. +// For small fixed sizes (ie a pixel), it has low overhead and inlines well. +// For large data sets, it optimizes into assembly/simd and is appropriate +// for realtime applications. +// See Also: +// http://www.cse.yorku.ca/~oz/hash.html + +static const uint32 kDJB2HashSeed = 5381u; + +// These functions perform DJB2 hash. The simplest call is DJB2Hash() to +// generate the DJB2 hash of the given data: +// uint32 hash = DJB2Hash(data1, length1, kDJB2HashSeed); +// +// You can also compute the DJB2 hash of data incrementally by making multiple +// calls to DJB2Hash(): +// uint32 hash_value = kDJB2HashSeed; // Initial seed for DJB2. +// for (size_t i = 0; i < copy_lines; ++i) { +// hash_value = DJB2Hash(source, bytes_per_line, hash_value); +// source += source_stride; +// } + +// For the given buffer of data, compute the DJB2 hash of +// the data. You can call this any number of times during the computation. +uint32 DJB2Hash(const void* buf, size_t len, uint32 seed); + +#endif // MEDIA_BASE_DJB2_H_ + |