Skip to content

Commit 6f730ce

Browse files
Add data offset to Char array data reader
1 parent 8cf48b4 commit 6f730ce

File tree

4 files changed

+32
-4
lines changed

4 files changed

+32
-4
lines changed

bloom-filter/src/main/scala/bloomfilter/CanGenerate128HashFrom.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ object CanGenerate128HashFrom {
2121

2222
override def generateHash(from: String): (Long, Long) = {
2323
val value = unsafe.getObject(from, valueOffset).asInstanceOf[Array[Char]]
24-
MurmurHash3Generic.murmurhash3_x64_128(value, 0, from.length, 0)
24+
MurmurHash3Generic.murmurhash3_x64_128(value, 0, from.length * 2, 0)
2525
}
2626
}
2727

bloom-filter/src/main/scala/bloomfilter/CanGenerateHashFrom.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ object CanGenerateHashFrom {
2525

2626
override def generateHash(from: String): Long = {
2727
val value = unsafe.getObject(from, valueOffset).asInstanceOf[Array[Char]]
28-
MurmurHash3Generic.murmurhash3_x64_64(value, 0, from.length, 0)
28+
MurmurHash3Generic.murmurhash3_x64_64(value, 0, from.length * 2, 0)
2929
}
3030
}
3131

bloom-filter/src/main/scala/bloomfilter/CanGetDataFrom.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@ object CanGetDataFrom {
2828
}
2929

3030
implicit case object CanGetDataFromArrayChar extends CanGetDataFrom[Array[Char]] {
31+
private val arrayCharOffset = unsafe.arrayBaseOffset(classOf[Array[Char]])
3132

3233
override def getLong(from: Array[Char], offset: Int): Long = {
33-
unsafe.getLong(from, offset.toLong)
34+
unsafe.getLong(from, arrayCharOffset + offset.toLong)
3435
}
3536

3637
override def getByte(from: Array[Char], offset: Int): Byte = {
37-
unsafe.getByte(from, offset.toLong)
38+
unsafe.getByte(from, arrayCharOffset + offset.toLong)
3839
}
3940
}
4041
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package tests.bloomfilter
2+
3+
import bloomfilter.CanGetDataFrom.CanGetDataFromArrayChar
4+
import org.scalatest.{FreeSpec, Matchers}
5+
6+
class CanGetDataFromSpec extends FreeSpec with Matchers {
7+
"CanGetDataFromArrayChar" in {
8+
CanGetDataFromArrayChar.getByte(Array[Char]('a'), 0) shouldEqual 97.toByte
9+
CanGetDataFromArrayChar.getByte(Array[Char]('a'), 1) shouldEqual 0.toByte
10+
11+
CanGetDataFromArrayChar.getByte(Array[Char]('a', 'b'), 0) shouldEqual 97.toByte
12+
CanGetDataFromArrayChar.getByte(Array[Char]('a', 'b'), 1) shouldEqual 0.toByte
13+
CanGetDataFromArrayChar.getByte(Array[Char]('a', 'b'), 2) shouldEqual 98.toByte
14+
CanGetDataFromArrayChar.getByte(Array[Char]('a', 'b'), 3) shouldEqual 0.toByte
15+
16+
CanGetDataFromArrayChar.getLong(Array[Char]('a', 'b', 'c', 'd'), 0) shouldEqual
17+
(0.toLong << 56) |
18+
(('d'.toByte & 0xffL) << 48) |
19+
((0 & 0xffL) << 40) |
20+
(('c'.toByte & 0xffL) << 32) |
21+
((0 & 0xffL) << 24) |
22+
(('b' & 0xffL) << 16) |
23+
((0 & 0xffL) << 8) |
24+
'a' & 0xffL
25+
26+
}
27+
}

0 commit comments

Comments
 (0)