From 5f9bab6c939f3a3b5ea0a5238f413d2977097531 Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Wed, 1 Feb 2012 10:42:36 +0200 Subject: [PATCH] extension methods for j.i.Timer --- stdlib/ktSrc/Timer.kt | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 stdlib/ktSrc/Timer.kt diff --git a/stdlib/ktSrc/Timer.kt b/stdlib/ktSrc/Timer.kt new file mode 100644 index 00000000000..5278efcba4d --- /dev/null +++ b/stdlib/ktSrc/Timer.kt @@ -0,0 +1,71 @@ +package std.concurrent + +import java.util.Timer +import java.util.TimerTask +import java.util.Date + +fun Timer.schedule(delay: Long, action: TimerTask.()->Unit) : TimerTask { + val task = createTask(action) + schedule(task, delay) + return task +} + +fun Timer.schedule(time: Date, action: TimerTask.()->Unit) : TimerTask { + val task = createTask(action) + schedule(task, time) + return task +} + +fun Timer.schedule(delay: Long, period: Long, action: TimerTask.()->Unit) : TimerTask { + val task = createTask(action) + schedule(task, delay, period) + return task +} + +fun Timer.schedule(time: Date, period: Long, action: TimerTask.()->Unit) : TimerTask { + val task = createTask(action) + schedule(task, time, period) + return task +} + +fun Timer.scheduleAtFixedRate(delay: Long, period: Long, action: TimerTask.()->Unit) : TimerTask { + val task = createTask(action) + scheduleAtFixedRate(task, delay, period) + return task +} + +fun Timer.scheduleAtFixedRate(time: Date, period: Long, action: TimerTask.()->Unit) : TimerTask { + val task = createTask(action) + scheduleAtFixedRate(task, time, period) + return task +} + +fun timer(name: String? = null, daemon: Boolean = false, initialDelay: Long = 0.lng, period: Long, action: TimerTask.()->Unit) : Timer { + val timer = if(name == null) Timer(daemon) else Timer(name, daemon) + timer.schedule(initialDelay, period, action) + return timer +} + +fun timer(name: String? = null, daemon: Boolean = false, startAt: Date, period: Long, action: TimerTask.()->Unit) : Timer { + val timer = if(name == null) Timer(daemon) else Timer(name, daemon) + timer.schedule(startAt, period, action) + return timer +} + +fun fixedRateTimer(name: String? = null, daemon: Boolean = false, initialDelay: Long = 0.lng, period: Long, action: TimerTask.()->Unit) : Timer { + val timer = if(name == null) Timer(daemon) else Timer(name, daemon) + timer.scheduleAtFixedRate(initialDelay, period, action) + return timer +} + +fun fixedRateTimer(name: String? = null, daemon: Boolean = false, startAt: Date, period : Long, action: TimerTask.()->Unit) : Timer { + val timer = if(name == null) Timer(daemon) else Timer(name, daemon) + timer.scheduleAtFixedRate(startAt, period, action) + return timer +} + +private fun createTask(action: TimerTask.()->Unit) : TimerTask = object: TimerTask() { + override fun run() { + action() + } +} \ No newline at end of file