1 module dinu.loader.choiceLoader;
2 
3 
4 import dinu;
5 
6 
7 __gshared:
8 
9 
10 class ChoiceLoader {
11 
12 	protected {
13 		immutable(Command)[] loaded;
14 		void delegate(immutable Command) dg;
15 		bool active = true;
16 	}
17 
18 	this(){
19 		task({
20 			try
21 				run;
22 			catch(Exception e)
23 				writeln(e);
24 		}).executeInNewThread;
25 	}
26 
27 	void each(void delegate(immutable Command) dg){
28 		synchronized(this){
29 			if(!active)
30 				return;
31 			foreach(c; loaded)
32 				dg(c);
33 			this.dg = dg;
34 		}
35 	}
36 
37 	void eachComplete(void delegate(immutable Command) dg){
38 		synchronized(this){
39 			foreach(c; loaded)
40 				dg(c);
41 		}
42 	}
43 
44 	void add(immutable Command c){
45 		synchronized(this){
46 			if(!active)
47 				return;
48 			loaded ~= c;
49 			if(dg)
50 				dg(c);
51 		}
52 	}
53 
54 	void run(){
55 	}
56 
57 	void stop(){
58 		synchronized(this){
59 			if(!active)
60 				return;
61 			active = false;
62 		}
63 	}
64 
65 }
66