aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs
blob: 41d17802a22e2963d9b78e8f0598e0fc0664da0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using Ryujinx.Horizon.Sdk.OsTypes.Impl;
using System.Collections.Generic;

namespace Ryujinx.Horizon.Sdk.OsTypes
{
    class MultiWait
    {
        private readonly MultiWaitImpl _impl;

        public IEnumerable<MultiWaitHolderBase> MultiWaits => _impl.MultiWaits;

        public MultiWait()
        {
            _impl = new MultiWaitImpl();
        }

        public void LinkMultiWaitHolder(MultiWaitHolderBase multiWaitHolder)
        {
            DebugUtil.Assert(!multiWaitHolder.IsLinked);

            _impl.LinkMultiWaitHolder(multiWaitHolder);

            multiWaitHolder.SetMultiWait(_impl);
        }

        public void MoveAllFrom(MultiWait other)
        {
            _impl.MoveAllFrom(other._impl);
        }

        public MultiWaitHolder WaitAny()
        {
            return (MultiWaitHolder)_impl.WaitAnyImpl(true, -1L);
        }

        public MultiWaitHolder TryWaitAny()
        {
            return (MultiWaitHolder)_impl.WaitAnyImpl(false, 0);
        }

        public MultiWaitHolder TimedWaitAny(long timeout)
        {
            return (MultiWaitHolder)_impl.WaitAnyImpl(false, timeout);
        }
    }
}