Skip to content
This repository was archived by the owner on Jan 20, 2023. It is now read-only.

Commit 4568567

Browse files
committed
mutabilityが無くなったため、manager無しで回すように修正
1 parent 91e8bcc commit 4568567

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

src/main/kotlin/com/mapk/core/internal/ArgumentBucket.kt

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import com.mapk.core.ArgumentAdaptor
44
import java.util.Objects
55
import kotlin.reflect.KParameter
66

7-
// TODO: 初期化の効率化方法の検討他
87
internal class ArgumentBucket(
98
private val keyList: List<KParameter>,
109
val valueArray: Array<Any?>,
@@ -17,35 +16,42 @@ internal class ArgumentBucket(
1716
override var value: Any?
1817
) : Map.Entry<KParameter, Any?>
1918

20-
private val initializationStatusManager = InitializationStatusManager(initializationStatus)
19+
private val initializationStatuses: List<Boolean>
2120
val isInitialized: Boolean
2221
override val size: Int
2322

2423
init {
24+
var count: Int = if (initializationStatus[0]) 1 else 0
25+
2526
argumentBinders.forEach {
2627
val result = it.bindArgument(adaptor, valueArray)
27-
if (result) initializationStatusManager.put(it.index)
28+
if (result) {
29+
count++
30+
initializationStatus[it.index] = true
31+
}
2832
}
2933

30-
isInitialized = initializationStatusManager.isFullInitialized
31-
size = initializationStatusManager.count
34+
initializationStatuses = initializationStatus.toList()
35+
isInitialized = count == initializationStatus.size
36+
size = count
3237
}
3338

34-
override fun containsKey(key: KParameter): Boolean = initializationStatusManager.isInitialized(key.index)
39+
override fun containsKey(key: KParameter): Boolean = initializationStatuses[key.index]
3540

3641
override fun containsValue(value: Any?): Boolean = valueArray.any { Objects.equals(value, it) }
3742

3843
override fun get(key: KParameter): Any? = valueArray[key.index]
3944

40-
override fun isEmpty(): Boolean = initializationStatusManager.count == 0
45+
override fun isEmpty(): Boolean = size == 0
4146

47+
// NOTE: 本来であれば生成時に確定する内容だが、これらのメソッドは関数呼び出し時にアクセスされることが無いため、カスタムゲッターとしている
4248
override val entries: Set<Map.Entry<KParameter, Any?>>
4349
get() = keyList
44-
.filter { initializationStatusManager.isInitialized(it.index) }
50+
.filter { initializationStatuses[it.index] }
4551
.map { Entry(it, valueArray[it.index]) }
4652
.toSet()
4753
override val keys: Set<KParameter>
48-
get() = keyList.filter { initializationStatusManager.isInitialized(it.index) }.toSet()
54+
get() = keyList.filter { initializationStatuses[it.index] }.toSet()
4955
override val values: Collection<Any?>
50-
get() = valueArray.filterIndexed { i, _ -> initializationStatusManager.isInitialized(i) }
56+
get() = valueArray.filterIndexed { i, _ -> initializationStatuses[i] }
5157
}

0 commit comments

Comments
 (0)