#!/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
