it.unibo.alchemist.core.ArrayIndexedPriorityFixedBatchQueue.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alchemist-engine Show documentation
Show all versions of alchemist-engine Show documentation
Alchemist core simulation engine
/*
* Copyright (C) 2010-2023, Danilo Pianini and contributors
* listed, for each module, in the respective subproject's build.gradle.kts file.
*
* This file is part of Alchemist, and is distributed under the terms of the
* GNU General Public License, with a linking exception,
* as described in the file LICENSE in the Alchemist distribution's top directory.
*/
package it.unibo.alchemist.core
import it.unibo.alchemist.model.Actionable
/**
* Batched extension for ArrayIndexedPriorityQueue.
* This implementation presents fixed size batches.
*
* @param concentration type
*/
class ArrayIndexedPriorityFixedBatchQueue(
private val batchSize: Int,
private val delegate: ArrayIndexedPriorityQueue = ArrayIndexedPriorityQueue(),
) : Scheduler by delegate, BatchedScheduler {
override fun getNextBatch(): List> {
return if (delegate.tree.isNotEmpty()) {
delegate.tree.subList(0, delegate.tree.size.coerceAtMost(batchSize))
} else {
emptyList()
}
}
override fun updateReaction(reaction: Actionable) {
synchronized(this) {
delegate.updateReaction(reaction)
}
}
}