diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt index c3d513a0..ddb2bd20 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt @@ -64,7 +64,18 @@ object Starbound : ISBFileLocator { const val PROTOCOL_VERSION = 1 const val TICK_TIME_ADVANCE = 1.0 / 60.0 const val TICK_TIME_ADVANCE_NANOS = 16_666_666L + + // compile flags. uuuugh const val DEDUP_CELL_STATES = true + const val USE_CAFFEINE_INTERNER = false + + fun interner(): Interner { + return if (USE_CAFFEINE_INTERNER) Interner.newWeakInterner() else HashTableInterner() + } + + fun interner(bits: Int): Interner { + return if (USE_CAFFEINE_INTERNER) Interner.newWeakInterner() else HashTableInterner(bits) + } val thread = Thread(::universeThread, "Starbound Universe") val mailbox = MailboxExecutorService(thread) @@ -87,7 +98,7 @@ object Starbound : ISBFileLocator { // Hrm. // val strings: Interner = Interner.newWeakInterner() // val strings: Interner = Interner { it } - val STRINGS: Interner = HashTableInterner(5) + val STRINGS: Interner = interner(5) private val LOGGER = LogManager.getLogger() diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/util/SBPattern.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/util/SBPattern.kt index 1275b5e7..a29ea434 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/util/SBPattern.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/util/SBPattern.kt @@ -152,7 +152,7 @@ class SBPattern private constructor( } companion object : TypeAdapterFactory { - private val interner: Interner = HashTableInterner(5) + private val interner: Interner = Starbound.interner(5) @JvmField val EMPTY = raw("") diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractCell.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractCell.kt index 89bc6e5e..ef66715d 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractCell.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractCell.kt @@ -43,7 +43,7 @@ sealed class AbstractCell { } @JvmStatic - protected val POOL: Interner = if (Starbound.DEDUP_CELL_STATES) HashTableInterner() else Interner { it } + protected val POOL: Interner = if (Starbound.DEDUP_CELL_STATES) Starbound.interner() else Interner { it } val EMPTY: ImmutableCell = POOL.intern(ImmutableCell(AbstractTileState.EMPTY, AbstractTileState.EMPTY, AbstractLiquidState.EMPTY, 0, 0, 0, false)) val NULL: ImmutableCell = POOL.intern(ImmutableCell(AbstractTileState.NULL, AbstractTileState.NULL, AbstractLiquidState.EMPTY, 0, 0, 0, false)) diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractLiquidState.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractLiquidState.kt index c8c00285..b9826e09 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractLiquidState.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractLiquidState.kt @@ -30,7 +30,7 @@ sealed class AbstractLiquidState { } @JvmStatic - protected val POOL: Interner = if (Starbound.DEDUP_CELL_STATES) HashTableInterner() else Interner { it } + protected val POOL: Interner = if (Starbound.DEDUP_CELL_STATES) Starbound.interner() else Interner { it } val EMPTY: ImmutableLiquidState = POOL.intern(ImmutableLiquidState()) } diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractTileState.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractTileState.kt index 7aa2928d..ba37df8a 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractTileState.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/world/api/AbstractTileState.kt @@ -35,7 +35,7 @@ sealed class AbstractTileState { } @JvmStatic - protected val POOL: Interner = if (Starbound.DEDUP_CELL_STATES) HashTableInterner() else Interner { it } + protected val POOL: Interner = if (Starbound.DEDUP_CELL_STATES) Starbound.interner() else Interner { it } val EMPTY: ImmutableTileState = POOL.intern(ImmutableTileState(BuiltinMetaMaterials.EMPTY)) val NULL: ImmutableTileState = POOL.intern(ImmutableTileState(BuiltinMetaMaterials.NULL))