Home | History | Annotate | Download | only in Support
      1 //===-- llvm/Support/DJB.h ---DJB Hash --------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file contains support for the DJ Bernstein hash function.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_SUPPORT_DJB_H
     15 #define LLVM_SUPPORT_DJB_H
     16 
     17 #include "llvm/ADT/StringRef.h"
     18 
     19 namespace llvm {
     20 
     21 /// The Bernstein hash function used by the DWARF accelerator tables.
     22 inline uint32_t djbHash(StringRef Buffer, uint32_t H = 5381) {
     23   for (unsigned char C : Buffer.bytes())
     24     H = (H << 5) + H + C;
     25   return H;
     26 }
     27 
     28 /// Computes the Bernstein hash after folding the input according to the Dwarf 5
     29 /// standard case folding rules.
     30 uint32_t caseFoldingDjbHash(StringRef Buffer, uint32_t H = 5381);
     31 } // namespace llvm
     32 
     33 #endif // LLVM_SUPPORT_DJB_H
     34