| Index: tools/grit/grit/extern/FP.py
|
| diff --git a/tools/grit/grit/extern/FP.py b/tools/grit/grit/extern/FP.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..3bde18dcfccf60f70959c56b8882d1c1d4f5f460
|
| --- /dev/null
|
| +++ b/tools/grit/grit/extern/FP.py
|
| @@ -0,0 +1,71 @@
|
| +#!/usr/bin/env python
|
| +# Copyright (c) 2012 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.
|
| +
|
| +try:
|
| + import hashlib
|
| + _new_md5 = hashlib.md5
|
| +except ImportError:
|
| + import md5
|
| + _new_md5 = md5.new
|
| +
|
| +
|
| +"""64-bit fingerprint support for strings.
|
| +
|
| +Usage:
|
| + from extern import FP
|
| + print 'Fingerprint is %ld' % FP.FingerPrint('Hello world!')
|
| +"""
|
| +
|
| +
|
| +def _UnsignedFingerPrintImpl(str, encoding='utf-8'):
|
| + """Generate a 64-bit fingerprint by taking the first half of the md5
|
| + of the string.
|
| + """
|
| + hex128 = _new_md5(str).hexdigest()
|
| + int64 = long(hex128[:16], 16)
|
| + return int64
|
| +
|
| +
|
| +def UnsignedFingerPrint(str, encoding='utf-8'):
|
| + """Generate a 64-bit fingerprint.
|
| +
|
| + The default implementation uses _UnsignedFingerPrintImpl, which
|
| + takes the first half of the md5 of the string, but the
|
| + implementation may be switched using SetUnsignedFingerPrintImpl.
|
| + """
|
| + return _UnsignedFingerPrintImpl(str, encoding)
|
| +
|
| +
|
| +def FingerPrint(str, encoding='utf-8'):
|
| + fp = UnsignedFingerPrint(str, encoding=encoding)
|
| + # interpret fingerprint as signed longs
|
| + if fp & 0x8000000000000000L:
|
| + fp = - ((~fp & 0xFFFFFFFFFFFFFFFFL) + 1)
|
| + return fp
|
| +
|
| +
|
| +def UseUnsignedFingerPrintFromModule(module_name):
|
| + """Imports module_name and replaces UnsignedFingerPrint in the
|
| + current module with the function of the same name from the imported
|
| + module.
|
| +
|
| + Returns the function object previously known as
|
| + grit.extern.FP.UnsignedFingerPrint.
|
| + """
|
| + hash_module = __import__(module_name, fromlist=[module_name])
|
| + return SetUnsignedFingerPrint(hash_module.UnsignedFingerPrint)
|
| +
|
| +
|
| +def SetUnsignedFingerPrint(function_object):
|
| + """Sets grit.extern.FP.UnsignedFingerPrint to point to
|
| + function_object.
|
| +
|
| + Returns the function object previously known as
|
| + grit.extern.FP.UnsignedFingerPrint.
|
| + """
|
| + global UnsignedFingerPrint
|
| + original_function_object = UnsignedFingerPrint
|
| + UnsignedFingerPrint = function_object
|
| + return original_function_object
|
|
|