2025-06-22 21:05:09 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
2026-03-16 06:37:51 +01:00
|
|
|
#include <pd/drivers/interface.hpp>
|
2025-06-22 21:05:09 +02:00
|
|
|
|
|
|
|
|
namespace PD {
|
2026-03-16 06:37:51 +01:00
|
|
|
class PD_API OsDriver : public DriverInterface {
|
|
|
|
|
public:
|
|
|
|
|
OsDriver(std::string_view name = "Default") : DriverInterface(name) {}
|
|
|
|
|
virtual ~OsDriver() {}
|
|
|
|
|
|
|
|
|
|
virtual u64 GetTime() const;
|
|
|
|
|
virtual u64 GetTimeNano() const;
|
|
|
|
|
};
|
2025-06-22 21:05:09 +02:00
|
|
|
|
2026-03-16 06:37:51 +01:00
|
|
|
class PD_API Os {
|
2025-06-22 21:05:09 +02:00
|
|
|
public:
|
2026-03-16 06:37:51 +01:00
|
|
|
Os() = default;
|
|
|
|
|
~Os() = default;
|
2025-06-22 21:05:09 +02:00
|
|
|
|
2026-03-16 06:37:51 +01:00
|
|
|
template <typename T, typename... Args>
|
|
|
|
|
static void UseDriver(Args&&... args) {
|
|
|
|
|
// assert(driver == nullptr && "OS Driver already set");
|
|
|
|
|
driver = std::make_unique<T>(std::forward<Args>(args)...);
|
|
|
|
|
}
|
2025-06-22 21:05:09 +02:00
|
|
|
|
2026-03-16 06:37:51 +01:00
|
|
|
static u64 GetTime() { return driver->GetTime(); }
|
|
|
|
|
static u64 GetTimeNano() { return driver->GetTimeNano(); }
|
2025-06-22 21:05:09 +02:00
|
|
|
|
2026-01-26 20:46:27 +01:00
|
|
|
private:
|
2026-03-16 06:37:51 +01:00
|
|
|
static std::unique_ptr<OsDriver> driver;
|
2025-06-22 21:05:09 +02:00
|
|
|
};
|
|
|
|
|
} // namespace PD
|