2021-01-02 14:13:47 +00:00
|
|
|
package dev.inmo.krontab
|
|
|
|
|
|
|
|
import dev.inmo.krontab.collection.CollectionKronScheduler
|
2021-04-09 18:28:08 +00:00
|
|
|
import dev.inmo.krontab.collection.includeAll
|
|
|
|
import dev.inmo.krontab.internal.*
|
2021-01-02 14:13:47 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Create new one [CollectionKronScheduler] to include all [KronScheduler]s of [this] [Iterator]
|
|
|
|
*
|
|
|
|
* @see CollectionKronScheduler
|
|
|
|
* @see CollectionKronScheduler.include
|
|
|
|
*/
|
2021-04-09 18:28:08 +00:00
|
|
|
fun Iterator<KronScheduler>.merge(): CollectionKronScheduler {
|
2021-01-02 14:13:47 +00:00
|
|
|
val cronDateTimes = mutableListOf<CronDateTime>()
|
2021-04-09 18:28:08 +00:00
|
|
|
val timezonedCronDateTimes = mutableListOf<CronDateTimeSchedulerTz>()
|
2021-01-02 14:13:47 +00:00
|
|
|
val collectionScheduler = CollectionKronScheduler()
|
|
|
|
forEach {
|
|
|
|
when (it) {
|
|
|
|
is CronDateTimeScheduler -> cronDateTimes.addAll(it.cronDateTimes)
|
2021-04-09 18:28:08 +00:00
|
|
|
is CronDateTimeSchedulerTz -> timezonedCronDateTimes.add(it)
|
2021-01-02 14:13:47 +00:00
|
|
|
else -> collectionScheduler.include(it)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (cronDateTimes.isNotEmpty()) {
|
|
|
|
collectionScheduler.include(CronDateTimeScheduler(cronDateTimes))
|
|
|
|
}
|
2021-04-09 18:28:08 +00:00
|
|
|
if (timezonedCronDateTimes.isNotEmpty()) {
|
|
|
|
collectionScheduler.includeAll(mergeCronDateTimeSchedulers(timezonedCronDateTimes))
|
|
|
|
}
|
2021-01-02 14:13:47 +00:00
|
|
|
return collectionScheduler
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create new one [CollectionKronScheduler] to include all [KronScheduler]s of [this] [Iterator]
|
|
|
|
*
|
|
|
|
* @see CollectionKronScheduler
|
|
|
|
* @see CollectionKronScheduler.include
|
|
|
|
*/
|
|
|
|
@Suppress("NOTHING_TO_INLINE")
|
2021-04-09 18:28:08 +00:00
|
|
|
inline fun Iterable<KronScheduler>.merge(): CollectionKronScheduler = iterator().merge()
|
2021-01-02 14:13:47 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @return Vararg shortcut for [merge]
|
|
|
|
*/
|
|
|
|
@Suppress("NOTHING_TO_INLINE")
|
2021-04-09 18:28:08 +00:00
|
|
|
inline fun merge(vararg kronDateTimeSchedulers: KronScheduler): CollectionKronScheduler = kronDateTimeSchedulers.iterator().merge()
|