1 module evael.utils.Functions;
2 
3 import std.parallelism;
4 import std.datetime;
5 import std.array;
6 import std.traits;
7 
8 import core.exception;
9 import core.stdc.string;
10 import core.thread;
11 
12 immutable MonoTime startupTime;
13 
14 shared static this()
15 {
16 	startupTime = MonoTime.currTime;
17 }
18 
19 void startTask(void delegate() func)
20 {
21 	task(func).executeInNewThread();
22 }
23 
24 /**
25  * Starts a task after X time.
26  * Params:
27  * 		callback : task to execute
28  * 		interval : interval
29  */
30 void startDelayedTask(void delegate() callback, in int interval)
31 {
32 	task(()
33 	{
34 		Thread.sleep(interval.seconds);
35 		callback();
36 
37 	}).executeInNewThread();
38 }
39 
40 @nogc
41 Duration timeSinceProgramStarted() nothrow
42 {
43 	return MonoTime.currTime - startupTime;
44 }
45 
46 @nogc
47 float getCurrentTime() nothrow
48 {
49 	return timeSinceProgramStarted.total!"msecs";
50 }
51 
52 @nogc
53 auto bindDelegate(T)(T t) nothrow
54 	if(isDelegate!T)
55 {
56 	static T dg;
57 
58 	dg = t;
59 
60 	extern(C)
61 	static ReturnType!T func(ParameterTypeTuple!T args)
62 	{
63 		return dg(args);
64 	}
65 
66 	return &func;
67 }