All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.KronSchedulersMerging.kt Maven / Gradle / Ivy

package dev.inmo.krontab

import dev.inmo.krontab.collection.CollectionKronScheduler
import dev.inmo.krontab.collection.includeAll
import dev.inmo.krontab.internal.*

/**
 * Create new one [CollectionKronScheduler] to include all [KronScheduler]s of [this] [Iterator]
 *
 * @see CollectionKronScheduler
 * @see CollectionKronScheduler.include
 */
fun Iterator.merge(): CollectionKronScheduler {
    val cronDateTimes = mutableListOf()
    val timezonedCronDateTimes = mutableListOf()
    val collectionScheduler = CollectionKronScheduler()
    forEach {
        when (it) {
            is CronDateTimeScheduler -> cronDateTimes.add(it.cronDateTime)
            is CronDateTimeSchedulerTz -> timezonedCronDateTimes.add(it)
            else -> collectionScheduler.include(it)
        }
    }
    if (cronDateTimes.isNotEmpty()) {
        collectionScheduler.include(CronDateTimeScheduler(cronDateTimes.merge()))
    }
    if (timezonedCronDateTimes.isNotEmpty()) {
        collectionScheduler.includeAll(mergeCronDateTimeSchedulers(timezonedCronDateTimes))
    }
    return collectionScheduler
}

/**
 * Create new one [CollectionKronScheduler] to include all [KronScheduler]s of [this] [Iterator]
 *
 * @see CollectionKronScheduler
 * @see CollectionKronScheduler.include
 */
@Suppress("NOTHING_TO_INLINE")
inline fun Iterable.merge(): CollectionKronScheduler = iterator().merge()

/**
 * @return Vararg shortcut for [merge]
 */
@Suppress("NOTHING_TO_INLINE")
inline fun merge(vararg kronDateTimeSchedulers: KronScheduler): CollectionKronScheduler = kronDateTimeSchedulers.iterator().merge()




© 2015 - 2025 Weber Informatics LLC | Privacy Policy