os: refactor/rewrite entire namespace.
This commit is contained in:
@@ -16,11 +16,17 @@
|
||||
#pragma once
|
||||
#include "os_waitable_holder_base.hpp"
|
||||
|
||||
#if defined(ATMOSPHERE_OS_HORIZON)
|
||||
#include "os_waitable_manager_target_impl.os.horizon.hpp"
|
||||
#else
|
||||
#error "Unknown OS for ams::os::WaitableManagerTargetImpl"
|
||||
#endif
|
||||
|
||||
namespace ams::os::impl {
|
||||
|
||||
class WaitableManagerImpl {
|
||||
public:
|
||||
static constexpr size_t MaximumHandleCount = 0x40;
|
||||
static constexpr size_t MaximumHandleCount = WaitableManagerTargetImpl::MaximumHandleCount;
|
||||
static constexpr s32 WaitInvalid = -3;
|
||||
static constexpr s32 WaitCancelled = -2;
|
||||
static constexpr s32 WaitTimedOut = -1;
|
||||
@@ -28,31 +34,30 @@ namespace ams::os::impl {
|
||||
private:
|
||||
ListType waitable_list;
|
||||
WaitableHolderBase *signaled_holder;
|
||||
u64 current_time;
|
||||
Mutex lock;
|
||||
Handle waiting_thread_handle;
|
||||
TimeSpan current_time;
|
||||
InternalCriticalSection cs_wait;
|
||||
WaitableManagerTargetImpl target_impl;
|
||||
private:
|
||||
WaitableHolderBase *WaitAnyImpl(bool infinite, u64 timeout);
|
||||
WaitableHolderBase *WaitAnyHandleImpl(bool infinite, u64 timeout);
|
||||
s32 WaitSynchronization(Handle *handles, size_t count, u64 timeout);
|
||||
size_t BuildHandleArray(Handle *out_handles, WaitableHolderBase **out_objects);
|
||||
WaitableHolderBase *WaitAnyImpl(bool infinite, TimeSpan timeout);
|
||||
WaitableHolderBase *WaitAnyHandleImpl(bool infinite, TimeSpan timeout);
|
||||
s32 BuildHandleArray(Handle out_handles[], WaitableHolderBase *out_objects[], s32 num);
|
||||
|
||||
WaitableHolderBase *LinkHoldersToObjectList();
|
||||
void UnlinkHoldersFromObjectList();
|
||||
|
||||
WaitableHolderBase *RecalculateNextTimeout(u64 *out_min_timeout, u64 end_time);
|
||||
WaitableHolderBase *RecalculateNextTimeout(TimeSpan *out_min_timeout, TimeSpan end_time);
|
||||
public:
|
||||
/* Wait. */
|
||||
WaitableHolderBase *WaitAny() {
|
||||
return this->WaitAnyImpl(true, std::numeric_limits<u64>::max());
|
||||
return this->WaitAnyImpl(true, TimeSpan::FromNanoSeconds(std::numeric_limits<s64>::max()));
|
||||
}
|
||||
|
||||
WaitableHolderBase *TryWaitAny() {
|
||||
return this->WaitAnyImpl(false, 0);
|
||||
return this->WaitAnyImpl(false, TimeSpan(0));
|
||||
}
|
||||
|
||||
WaitableHolderBase *TimedWaitAny(u64 timeout) {
|
||||
return this->WaitAnyImpl(false, timeout);
|
||||
WaitableHolderBase *TimedWaitAny(TimeSpan ts) {
|
||||
return this->WaitAnyImpl(false, ts);
|
||||
}
|
||||
|
||||
/* List management. */
|
||||
@@ -84,7 +89,7 @@ namespace ams::os::impl {
|
||||
}
|
||||
|
||||
/* Other. */
|
||||
u64 GetCurrentTime() const {
|
||||
TimeSpan GetCurrentTime() const {
|
||||
return this->current_time;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user