mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-23 22:00:10 +08:00
Improve iteration performance
This commit is contained in:
parent
03caca95ba
commit
51e98ef62d
@ -16,6 +16,10 @@ import kotlin.jvm.JvmMultifileClass
|
||||
import kotlin.jvm.JvmName
|
||||
|
||||
/**
|
||||
* 链接的两个消息.
|
||||
*
|
||||
* @see Message.plus
|
||||
*
|
||||
* Left-biased list
|
||||
*/
|
||||
class CombinedMessage(
|
||||
@ -27,11 +31,19 @@ class CombinedMessage(
|
||||
private suspend fun SequenceScope<Message>.yieldCombinedOrElements(message: Message) {
|
||||
when (message) {
|
||||
is CombinedMessage -> {
|
||||
// fast path, 避免创建新的 iterator, 也不会挂起协程
|
||||
yieldCombinedOrElements(message.element)
|
||||
yieldCombinedOrElements(message.left)
|
||||
}
|
||||
is MessageChain -> message.forEach { yieldCombinedOrElements(it) }
|
||||
else -> yield(message)
|
||||
is MessageChain -> {
|
||||
// 更好的性能, 因为协程不会挂起.
|
||||
// 这可能会导致爆栈 (十万个元素), 但作为消息序列足够了.
|
||||
message.forEach { yieldCombinedOrElements(it) }
|
||||
}
|
||||
else -> {
|
||||
check(message is SingleMessage) { "unsupported Message type. DO NOT CREATE YOUR OWN Message TYPE!" }
|
||||
yield(message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user