sdk: const correctness
[sdk] / ecere / src / sys / Condition.ec
1 #if defined(BUILDING_ECERE_COM)
2 import "Semaphore"
3 #else
4 import "ecere"
5 #endif
6
7 public class Condition : struct
8 {
9    const char * name;
10    Mutex lock { };
11    int waiting;
12    int signals;
13    Semaphore waitSem { };
14    Semaphore waitDone { };
15
16 public:
17    property const char * name
18    {
19       set { name = value; }
20       get { return name; }
21    }
22
23    void Signal()
24    {
25       lock.Wait();
26       if (waiting > signals)
27       {
28          signals++;
29          waitSem.Release();
30          lock.Release();
31          waitDone.Wait();
32       }
33       else
34          lock.Release();
35    }
36
37    void Wait(Mutex mutex)
38    {
39       lock.Wait();
40       waiting++;
41       lock.Release();
42
43       mutex.Release();
44
45       waitSem.Wait();
46
47       lock.Wait();
48       if(signals > 0)
49       {
50          waitDone.Release();
51          signals--;
52       }
53       waiting--;
54       lock.Release();
55
56       mutex.Wait();
57    }
58 }