From f31a38c307e02664a50dbabf161407558fc22146 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 8 Mar 2025 17:44:40 +0700 Subject: [PATCH] Declare internal state of PRNGs as fields --- gradle.properties | 2 +- src/main/kotlin/ru/dbotthepony/kommons/random/LCG64Random.kt | 5 ++++- src/main/kotlin/ru/dbotthepony/kommons/random/PCG32Random.kt | 5 ++++- .../dbotthepony/kommons/random/Xoshiro256PlusPlusRandom.kt | 4 ++++ .../dbotthepony/kommons/random/Xoshiro256StarStarRandom.kt | 4 ++++ 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index b530ef8..47c392b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ kotlin.code.style=official specifyKotlinAsDependency=false projectGroup=ru.dbotthepony.kommons -projectVersion=3.3.1 +projectVersion=3.3.2 guavaDepVersion=33.0.0 gsonDepVersion=2.8.9 diff --git a/src/main/kotlin/ru/dbotthepony/kommons/random/LCG64Random.kt b/src/main/kotlin/ru/dbotthepony/kommons/random/LCG64Random.kt index e4d47bd..cddda09 100644 --- a/src/main/kotlin/ru/dbotthepony/kommons/random/LCG64Random.kt +++ b/src/main/kotlin/ru/dbotthepony/kommons/random/LCG64Random.kt @@ -11,7 +11,10 @@ import java.util.random.RandomGenerator * Generally shouldn't be used, and instead [PCG32Random] should be used, considering the latter has same memory * requirements but has way better statistical properties. */ -open class LCG64Random(protected var seed: Long) : RandomGenerator { +open class LCG64Random( + @JvmField + protected var seed: Long +) : RandomGenerator { override fun nextLong(): Long { val a = nextInt().toLong() val b = nextInt().toLong() and 0xFFFFFFFFL diff --git a/src/main/kotlin/ru/dbotthepony/kommons/random/PCG32Random.kt b/src/main/kotlin/ru/dbotthepony/kommons/random/PCG32Random.kt index 2e4575c..4a3b744 100644 --- a/src/main/kotlin/ru/dbotthepony/kommons/random/PCG32Random.kt +++ b/src/main/kotlin/ru/dbotthepony/kommons/random/PCG32Random.kt @@ -6,7 +6,10 @@ import java.util.random.RandomGenerator * PCG XSH RR 32-bit (64-bit state) random generator, which has way better statistical properties * than plain [LCG64Random] generator */ -open class PCG32Random(protected var seed: Long) : RandomGenerator { +open class PCG32Random( + @JvmField + protected var seed: Long +) : RandomGenerator { final override fun nextInt(): Int { var x = this.seed this.seed = LCG64Random.MULTIPLIER * this.seed + LCG64Random.INCREMENT diff --git a/src/main/kotlin/ru/dbotthepony/kommons/random/Xoshiro256PlusPlusRandom.kt b/src/main/kotlin/ru/dbotthepony/kommons/random/Xoshiro256PlusPlusRandom.kt index fcb24eb..31d6340 100644 --- a/src/main/kotlin/ru/dbotthepony/kommons/random/Xoshiro256PlusPlusRandom.kt +++ b/src/main/kotlin/ru/dbotthepony/kommons/random/Xoshiro256PlusPlusRandom.kt @@ -8,9 +8,13 @@ import java.util.random.RandomGenerator * Where [Xoshiro256PlusPlusRandom] is used consider using [Xoshiro256StarStarRandom] instead. */ open class Xoshiro256PlusPlusRandom protected constructor( + @JvmField protected var s0: Long, + @JvmField protected var s1: Long, + @JvmField protected var s2: Long, + @JvmField protected var s3: Long, mark: Nothing? ) : RandomGenerator { diff --git a/src/main/kotlin/ru/dbotthepony/kommons/random/Xoshiro256StarStarRandom.kt b/src/main/kotlin/ru/dbotthepony/kommons/random/Xoshiro256StarStarRandom.kt index e25a640..8512bf8 100644 --- a/src/main/kotlin/ru/dbotthepony/kommons/random/Xoshiro256StarStarRandom.kt +++ b/src/main/kotlin/ru/dbotthepony/kommons/random/Xoshiro256StarStarRandom.kt @@ -8,9 +8,13 @@ import java.util.random.RandomGenerator * by backward compatibility) */ open class Xoshiro256StarStarRandom protected constructor( + @JvmField protected var s0: Long, + @JvmField protected var s1: Long, + @JvmField protected var s2: Long, + @JvmField protected var s3: Long, mark: Nothing? ) : RandomGenerator {