[Misc] Cleanup in Kernel
This commit is contained in:
committed by
Radosław Gliński
parent
50492a951e
commit
b864149575
64
src/xenia/kernel/util/xfiletime.h
Normal file
64
src/xenia/kernel/util/xfiletime.h
Normal file
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2025 Xenia Canary. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_UTIL_XFILETIME_H_
|
||||
#define XENIA_KERNEL_UTIL_XFILETIME_H_
|
||||
|
||||
#include "xenia/base/byte_order.h"
|
||||
#include "xenia/base/chrono.h"
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
|
||||
struct X_FILETIME {
|
||||
static constexpr uint64_t minimal_valid_time = 125911584000000000;
|
||||
static constexpr uint64_t maximal_valid_time = 157469184000000000;
|
||||
|
||||
xe::be<uint32_t> high_part;
|
||||
xe::be<uint32_t> low_part;
|
||||
|
||||
X_FILETIME() {
|
||||
high_part = 0;
|
||||
low_part = 0;
|
||||
}
|
||||
|
||||
X_FILETIME(uint64_t filetime) {
|
||||
high_part = static_cast<uint32_t>(filetime >> 32);
|
||||
low_part = static_cast<uint32_t>(filetime);
|
||||
}
|
||||
|
||||
X_FILETIME(std::time_t time) {
|
||||
const auto file_time =
|
||||
chrono::WinSystemClock::to_file_time(chrono::WinSystemClock::from_sys(
|
||||
std::chrono::system_clock::from_time_t(time)));
|
||||
|
||||
high_part = static_cast<uint32_t>(file_time >> 32);
|
||||
low_part = static_cast<uint32_t>(file_time);
|
||||
}
|
||||
|
||||
chrono::WinSystemClock::time_point to_time_point() const {
|
||||
const uint64_t filetime =
|
||||
(static_cast<uint64_t>(high_part) << 32) | low_part;
|
||||
|
||||
return chrono::WinSystemClock::from_file_time(filetime);
|
||||
}
|
||||
|
||||
bool is_valid() const {
|
||||
const uint64_t filetime =
|
||||
(static_cast<uint64_t>(high_part) << 32) | low_part;
|
||||
|
||||
return filetime >= minimal_valid_time && filetime <= maximal_valid_time;
|
||||
}
|
||||
};
|
||||
static_assert_size(X_FILETIME, 0x8);
|
||||
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user