Slide 159
Slide 159 text
@zachklipp
internal class SnapshotMutableStateImpl(
value: T,
override val policy: SnapshotMutationPolicy
) : StateObject, SnapshotMutableState {
override fun mergeRecords(
previous: StateRecord,
current: StateRecord,
applied: StateRecord
): StateRecord? {
val previousRecord = previous as StateStateRecord
val currentRecord = current as StateStateRecord
val appliedRecord = applied as StateStateRecord
return if (policy.equivalent(currentRecord.value, appliedRecord.value))
current
else {
val merged = policy.merge(
previousRecord.value,
currentRecord.value,
appliedRecord.value
)
if (merged != null) {
appliedRecord.create().also {
(it as StateStateRecord).value = merged
}
} else {
null
}
}
}
}