From 7ab3b3d335b3fb9d70e8e5b7fb9683c08f8a91fe Mon Sep 17 00:00:00 2001 From: Graham Date: Tue, 18 Aug 2020 20:42:39 +0100 Subject: [PATCH] Add method for calculating the K&R hash code of a CP-1252-encoded string Signed-off-by: Graham --- util/src/main/java/dev/openrs2/util/StringUtils.kt | 10 ++++++++++ util/src/test/java/dev/openrs2/util/StringUtilsTest.kt | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/util/src/main/java/dev/openrs2/util/StringUtils.kt b/util/src/main/java/dev/openrs2/util/StringUtils.kt index e48c10d5..d48ac8d4 100644 --- a/util/src/main/java/dev/openrs2/util/StringUtils.kt +++ b/util/src/main/java/dev/openrs2/util/StringUtils.kt @@ -1,5 +1,7 @@ package dev.openrs2.util +import dev.openrs2.util.charset.Cp1252Charset + fun CharSequence.indefiniteArticle(): String { require(isNotEmpty()) @@ -8,3 +10,11 @@ fun CharSequence.indefiniteArticle(): String { else -> "a" } } + +fun CharSequence.krHashCode(): Int { + var hash = 0 + for (c in this) { + hash = ((hash shl 5) - hash) + Cp1252Charset.encode(c) + } + return hash +} diff --git a/util/src/test/java/dev/openrs2/util/StringUtilsTest.kt b/util/src/test/java/dev/openrs2/util/StringUtilsTest.kt index c780e20d..1dfacf5c 100644 --- a/util/src/test/java/dev/openrs2/util/StringUtilsTest.kt +++ b/util/src/test/java/dev/openrs2/util/StringUtilsTest.kt @@ -13,4 +13,11 @@ object StringUtilsTest { "".indefiniteArticle() } } + + @Test + fun testKrHashCode() { + assertEquals(0, "".krHashCode()) + assertEquals(99162322, "hello".krHashCode()) + assertEquals(92340183, "h€llo".krHashCode()) + } }