Package Kit, WebPositive: Standardize string hashes.

Use either HashString or BString::HashValue (both of which currently
use the "modified hashpjw".)
This commit is contained in:
Augustin Cavalier 2024-09-09 12:01:32 -04:00
parent 73b4c7a698
commit e9254dd79c
7 changed files with 16 additions and 161 deletions

View File

@ -8,6 +8,7 @@
#include <new>
#include <String.h>
#include <util/OpenHashTable.h>
@ -18,9 +19,6 @@ namespace BHPKG {
namespace BPrivate {
uint32 hash_string(const char* string);
struct CachedString {
char* string;
int32 index;
@ -57,7 +55,7 @@ struct CachedStringHashDefinition {
size_t HashKey(const char* key) const
{
return hash_string(key);
return BString::HashValue(key);
}
size_t Hash(const CachedString* value) const

View File

@ -1813,7 +1813,7 @@ BrowserWindow::AuthenticationChallenge(BString message, BString& inOutUser,
= CredentialsStorage::SessionInstance();
// TODO: Using the message as key here is not so smart.
HashKeyString key(message);
HashString key(message);
if (failureCount == 0) {
if (persistentStorage->Contains(key)) {

View File

@ -158,7 +158,7 @@ CredentialsStorage::PersistentInstance()
bool
CredentialsStorage::Contains(const HashKeyString& key)
CredentialsStorage::Contains(const HashString& key)
{
BAutolock _(this);
@ -167,7 +167,7 @@ CredentialsStorage::Contains(const HashKeyString& key)
status_t
CredentialsStorage::PutCredentials(const HashKeyString& key,
CredentialsStorage::PutCredentials(const HashString& key,
const Credentials& credentials)
{
BAutolock _(this);
@ -177,7 +177,7 @@ CredentialsStorage::PutCredentials(const HashKeyString& key,
Credentials
CredentialsStorage::GetCredentials(const HashKeyString& key)
CredentialsStorage::GetCredentials(const HashString& key)
{
BAutolock _(this);
@ -226,7 +226,7 @@ CredentialsStorage::_SaveSettings() const
const CredentialMap::Entry& entry = iterator.Next();
if (entry.value.Archive(&credentialsArchive) != B_OK
|| credentialsArchive.AddString("key",
entry.key.value) != B_OK) {
entry.key.GetString()) != B_OK) {
break;
}
if (settingsArchive.AddMessage("credentials",

View File

@ -6,11 +6,13 @@
#ifndef CREDENTIAL_STORAGE_H
#define CREDENTIAL_STORAGE_H
#include "HashKeys.h"
#include "HashMap.h"
#include <Locker.h>
#include <String.h>
#include "HashMap.h"
#include "HashString.h"
class BFile;
class BMessage;
@ -48,10 +50,10 @@ public:
static CredentialsStorage* SessionInstance();
static CredentialsStorage* PersistentInstance();
bool Contains(const HashKeyString& key);
status_t PutCredentials(const HashKeyString& key,
bool Contains(const BPrivate::HashString& key);
status_t PutCredentials(const HashString& key,
const Credentials& credentials);
Credentials GetCredentials(const HashKeyString& key);
Credentials GetCredentials(const HashString& key);
private:
CredentialsStorage(bool persistent);
@ -63,7 +65,7 @@ private:
uint32 mode) const;
private:
typedef HashMap<HashKeyString, Credentials> CredentialMap;
typedef HashMap<HashString, Credentials> CredentialMap;
CredentialMap fCredentialMap;
static CredentialsStorage sPersistentInstance;
@ -74,4 +76,3 @@ private:
#endif // CREDENTIAL_STORAGE_H

View File

@ -1,124 +0,0 @@
/*
* Copyright 2010, Stephan Aßmus <superstippi@gmx.de>. All rights reserved.
* Copyright 2004-2007, Ingo Weinhold <ingo_weinhold@gmx.de>. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef HASH_KEYS_H
#define HASH_KEYS_H
#include <String.h>
namespace BPrivate {
#if 0
// TODO: Move here from HashMap.h and adapt all clients.
// HashKey32
template<typename Value>
struct HashKey32 {
HashKey32() {}
HashKey32(const Value& value) : value(value) {}
uint32 GetHashCode() const
{
return (uint32)value;
}
HashKey32<Value> operator=(const HashKey32<Value>& other)
{
value = other.value;
return *this;
}
bool operator==(const HashKey32<Value>& other) const
{
return (value == other.value);
}
bool operator!=(const HashKey32<Value>& other) const
{
return (value != other.value);
}
Value value;
};
// HashKey64
template<typename Value>
struct HashKey64 {
HashKey64() {}
HashKey64(const Value& value) : value(value) {}
uint32 GetHashCode() const
{
uint64 v = (uint64)value;
return (uint32)(v >> 32) ^ (uint32)v;
}
HashKey64<Value> operator=(const HashKey64<Value>& other)
{
value = other.value;
return *this;
}
bool operator==(const HashKey64<Value>& other) const
{
return (value == other.value);
}
bool operator!=(const HashKey64<Value>& other) const
{
return (value != other.value);
}
Value value;
};
#endif
struct HashKeyString {
HashKeyString() {}
HashKeyString(const BString& value) : value(value) {}
HashKeyString(const char* string) : value(string) {}
uint32 GetHashCode() const
{
// from the Dragon Book: a slightly modified hashpjw()
uint32 hash = 0;
const char* string = value.String();
if (string != NULL) {
for (; *string; string++) {
uint32 g = hash & 0xf0000000;
if (g != 0)
hash ^= g >> 24;
hash = (hash << 4) + *string;
}
}
return hash;
}
HashKeyString operator=(const HashKeyString& other)
{
value = other.value;
return *this;
}
bool operator==(const HashKeyString& other) const
{
return (value == other.value);
}
bool operator!=(const HashKeyString& other) const
{
return (value != other.value);
}
BString value;
};
} // namespace BPrivate
using BPrivate::HashKeyString;
#endif // HASH_KEYS_H

View File

@ -260,7 +260,7 @@ private:
size_t HashKey(const char* key) const
{
return string_hash(key);
return BString::HashValue(key);
}
size_t Hash(const Entry* value) const

View File

@ -14,26 +14,6 @@ namespace BHPKG {
namespace BPrivate {
// from the Dragon Book: a slightly modified hashpjw()
uint32
hash_string(const char* string)
{
if (string == NULL)
return 0;
uint32 h = 0;
for (; *string; string++) {
uint32 g = h & 0xf0000000;
if (g)
h ^= g >> 24;
h = (h << 4) + *string;
}
return h;
}
StringCache::StringCache()
{
}