зеркало из https://github.com/mozilla/gecko-dev.git
43 строки
1.1 KiB
C++
43 строки
1.1 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "StringOperations.h"
|
|
|
|
static unsigned long djbHash(const char *Str) {
|
|
unsigned long Hash = 5381;
|
|
|
|
for (const char *P = Str; *P; P++) {
|
|
// Hash * 33 + c
|
|
Hash = ((Hash << 5) + Hash) + *P;
|
|
}
|
|
|
|
return Hash;
|
|
}
|
|
|
|
// This doesn't actually return a hex string of |hash|, but it
|
|
// does... something. It doesn't really matter what.
|
|
static void hashToString(unsigned long Hash, char *Buffer) {
|
|
const char Table[] = {"0123456789abcdef"};
|
|
char *P = Buffer;
|
|
while (Hash) {
|
|
*P = Table[Hash & 0xf];
|
|
Hash >>= 4;
|
|
P++;
|
|
}
|
|
|
|
*P = 0;
|
|
}
|
|
|
|
std::string hash(const std::string &Str) {
|
|
static char HashStr[41];
|
|
unsigned long H = djbHash(Str.c_str());
|
|
hashToString(H, HashStr);
|
|
return std::string(HashStr);
|
|
}
|
|
|
|
std::string toString(int N) {
|
|
return stringFormat("%d", N);
|
|
}
|