@@ -4,7 +4,6 @@ import com.mapk.core.ArgumentAdaptor
44import java.util.Objects
55import kotlin.reflect.KParameter
66
7- // TODO: 初期化の効率化方法の検討他
87internal 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