1 // =================================
 2 // Copyright (c) 2022 Seppo Laakko
 3 // Distributed under the MIT license
 4 // =================================
 5 
 6 using System;
 7 using System.Collections;
 8 
 9 namespace System.Screen
10 {
11     public class EmptyEventArgs
12     {
13     }
14     
15     public class Event<HandlerArgs = EmptyEventArgs>
16     {
17         public nothrow void AddHandler(Handler handler)
18         {
19             if (Find(handlers.CBegin()handlers.CEnd()handler) == handlers.CEnd())
20             {
21                 handlers.Add(handler);
22             }
23         }
24         public nothrow void RemoveHandler(Handler handler)
25         {
26             handlers.Remove(handler);
27         }
28         public nothrow const List<Handler>& Handlers() const
29         {
30             return handlers;
31         }
32         public void Fire() where Args is EmptyEventArgs
33         {
34             for (Handler handler : handlers)
35             {
36                 handler();
37             }
38         }
39         public void Fire(Args& args)
40         {
41             for (Handler handler : handlers)
42             {
43                 handler(args);
44             }
45         }
46         private List<Handler> handlers;
47     }
48 }