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

Commit 4e78bbe

Browse files
committed
初期化状況を管理するためのバケツクラスを追加
1 parent 5ab12b9 commit 4e78bbe

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.wrongwrong.mapk.core
2+
3+
class ArgumentBucket(
4+
val bucket: Array<Any?>,
5+
private var initializeStatus: Int,
6+
private val initializeMask: List<Int>,
7+
// clone時の再計算を避けるため1回で済むようにデフォルト値化
8+
private val completionValue: Int = initializeMask.reduce { l, r -> l or r }
9+
) : Cloneable {
10+
val isInitialized: Boolean get() = initializeStatus == completionValue
11+
val notInitializedParameterIndexes: List<Int> get() = initializeMask.indices.filter {
12+
initializeStatus and initializeMask[it] == 0
13+
}
14+
15+
fun setArgument(argument: Any?, index: Int) {
16+
// 先に入ったものを優先するため、初期化済みなら何もしない
17+
if (initializeStatus and initializeMask[index] != 0) return
18+
19+
bucket[index] = argument
20+
initializeStatus = initializeStatus or initializeMask[index]
21+
}
22+
23+
public override fun clone(): ArgumentBucket {
24+
return ArgumentBucket(bucket.copyOf(), initializeStatus, initializeMask, completionValue)
25+
}
26+
}

0 commit comments

Comments
 (0)