Commit 162dfb7c authored by Him188's avatar Him188

Improve performance

parent c4b3eade
...@@ -34,7 +34,7 @@ internal constructor( ...@@ -34,7 +34,7 @@ internal constructor(
@JvmField internal val left: Message, // 必须已经完成 constrain single @JvmField internal val left: Message, // 必须已经完成 constrain single
@JvmField internal val tail: Message @JvmField internal val tail: Message
) : Message, MessageChain { ) : Message, MessageChain {
@OptIn(MiraiExperimentalAPI::class)
fun asSequence(): Sequence<SingleMessage> = sequence { fun asSequence(): Sequence<SingleMessage> = sequence {
yieldCombinedOrElementsFlatten(this@CombinedMessage) yieldCombinedOrElementsFlatten(this@CombinedMessage)
} }
...@@ -43,12 +43,13 @@ internal constructor( ...@@ -43,12 +43,13 @@ internal constructor(
return asSequence().iterator() return asSequence().iterator()
} }
override val size: Int by lazy { override val size: Int
var size = 0 get() = kotlin.run {
size += if (left is MessageChain) left.size else 1 var size = 0
size += if (tail is MessageChain) tail.size else 1 size += if (left is MessageChain) left.size else 1
size size += if (tail is MessageChain) tail.size else 1
} size
}
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
return other is CombinedMessage && other.left == this.left && other.tail == this.tail return other is CombinedMessage && other.left == this.left && other.tail == this.tail
...@@ -76,7 +77,7 @@ internal constructor( ...@@ -76,7 +77,7 @@ internal constructor(
private suspend fun SequenceScope<SingleMessage>.yieldCombinedOrElementsFlatten(message: Message) { private suspend fun SequenceScope<SingleMessage>.yieldCombinedOrElementsFlatten(message: Message) {
when (message) { when (message) {
is CombinedMessage -> { is CombinedMessage -> {
// fast path, 避免创建新的 iterator, 也不会挂起协程 // fast path
yieldCombinedOrElementsFlatten(message.left) yieldCombinedOrElementsFlatten(message.left)
yieldCombinedOrElementsFlatten(message.tail) yieldCombinedOrElementsFlatten(message.tail)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment