[+] Initial HWInfo stat implementations
[+] General fixes and clean up
This commit is contained in:
parent
97f1ae087e
commit
5d18f3535c
@ -9,6 +9,78 @@
|
||||
|
||||
namespace Aurora::HWInfo
|
||||
{
|
||||
struct AUKN_SYM CpuId
|
||||
{
|
||||
bool SSE3();
|
||||
bool PCLMULQDQ();
|
||||
bool MONITOR();
|
||||
bool SSSE3();
|
||||
bool FMA();
|
||||
bool CMPXCHG16B();
|
||||
bool SSE41();
|
||||
bool SSE42();
|
||||
bool MOVBE();
|
||||
bool POPCNT();
|
||||
bool AES();
|
||||
bool XSAVE();
|
||||
bool OSXSAVE();
|
||||
bool AVX();
|
||||
bool F16C();
|
||||
bool RDRAND();
|
||||
|
||||
bool MSR();
|
||||
bool CX8();
|
||||
bool SEP();
|
||||
bool CMOV();
|
||||
bool CLFSH();
|
||||
bool MMX();
|
||||
bool FXSR();
|
||||
bool SSE();
|
||||
bool SSE2();
|
||||
|
||||
bool FSGSBASE();
|
||||
bool BMI1();
|
||||
bool HLE();
|
||||
bool AVX2();
|
||||
bool BMI2();
|
||||
bool ERMS();
|
||||
bool INVPCID();
|
||||
bool RTM();
|
||||
bool AVX512F();
|
||||
bool RDSEED();
|
||||
bool ADX();
|
||||
bool AVX512PF();
|
||||
bool AVX512ER();
|
||||
bool AVX512CD();
|
||||
bool SHA();
|
||||
|
||||
bool PREFETCHWT1();
|
||||
|
||||
bool LAHF();
|
||||
bool LZCNT();
|
||||
bool ABM();
|
||||
bool SSE4a();
|
||||
bool XOP();
|
||||
bool TBM();
|
||||
|
||||
bool SYSCALL();
|
||||
bool MMXEXT();
|
||||
bool RDTSCP();
|
||||
bool _3DNOWEXT();
|
||||
bool _3DNOW();
|
||||
|
||||
AuString vendor;
|
||||
AuString brand;
|
||||
bool isIntel;
|
||||
bool isAMD;
|
||||
AuUInt32 f_1_ECX;
|
||||
AuUInt32 f_1_EDX;
|
||||
AuUInt32 f_7_EBX;
|
||||
AuUInt32 f_7_ECX;
|
||||
AuUInt32 f_81_ECX;
|
||||
AuUInt32 f_81_EDX;
|
||||
};
|
||||
|
||||
struct CpuInfo
|
||||
{
|
||||
Aurora::Build::EArchitecture cpuArch;
|
||||
@ -16,10 +88,8 @@ namespace Aurora::HWInfo
|
||||
AuUInt8 socket;
|
||||
AuUInt8 cores;
|
||||
AuUInt8 threads;
|
||||
|
||||
AuUInt32 cpuId[4];
|
||||
char vendor[12];
|
||||
unsigned features;
|
||||
|
||||
CpuId cpuId;
|
||||
};
|
||||
|
||||
AUKN_SYM const CpuInfo &GetCPUInfo();
|
||||
|
@ -9,7 +9,13 @@
|
||||
|
||||
namespace Aurora::HWInfo
|
||||
{
|
||||
AUKN_SYM AuUInt32 GetRamAvailableMb();
|
||||
AUKN_SYM AuUInt32 GetRamStartupAvailableMb();
|
||||
AUKN_SYM AuUInt32 GetRamTotalMb();
|
||||
struct RamStat
|
||||
{
|
||||
AuUInt64 used;
|
||||
AuUInt64 available;
|
||||
};
|
||||
|
||||
AUKN_SYM AuOptional<RamStat> GetMemStatProcess();
|
||||
AUKN_SYM AuOptional<RamStat> GetMemStatSystem();
|
||||
AUKN_SYM AuOptional<RamStat> GetMemStatStartup();
|
||||
}
|
@ -7,7 +7,7 @@
|
||||
***/
|
||||
#pragma once
|
||||
|
||||
namespace Aurora::IO::AFIO
|
||||
namespace Aurora::IO::FS
|
||||
{
|
||||
class IAsyncTransaction;
|
||||
|
||||
@ -20,14 +20,14 @@ namespace Aurora::IO::AFIO
|
||||
class IAsyncFinishedSubscriber
|
||||
{
|
||||
public:
|
||||
virtual OnAsyncFileOpFinished(AuUInt64 offset, AuUInt32 length) = 0;
|
||||
virtual void OnAsyncFileOpFinished(AuUInt64 offset, AuUInt32 length) = 0;
|
||||
};
|
||||
|
||||
class IAsyncTransaction
|
||||
{
|
||||
public:
|
||||
virtual void StartRead(AuUInt64 offset, void *, AuUInt32 length) = 0;
|
||||
virtual void StartWrite(AuUInt64 offset, const void *, AuUInt32 length) = 0;
|
||||
virtual bool StartRead(AuUInt64 offset, void *, AuUInt32 length) = 0;
|
||||
virtual bool StartWrite(AuUInt64 offset, const void *, AuUInt32 length) = 0;
|
||||
|
||||
virtual bool Complete() = 0;
|
||||
virtual AuUInt32 GetLastPacketLength() = 0;
|
||||
@ -37,7 +37,7 @@ namespace Aurora::IO::AFIO
|
||||
virtual void Wait(AuUInt32 timeout) = 0;
|
||||
};
|
||||
|
||||
AUKN_SHARED_API(Open, IAsyncFileStream, const AuString &path, bool readOnly = true, bool directIO = false);
|
||||
AUKN_SHARED_API(OpenAsync, IAsyncFileStream, const AuString &path, bool readOnly = true, bool directIO = false);
|
||||
|
||||
AUKN_SHARED bool WaitMultiple(const AuList<IAsyncTransaction> &files, AuUInt32 timeout);
|
||||
AUKN_SYM bool WaitMultiple(const AuList<IAsyncTransaction> &files, AuUInt32 timeout);
|
||||
}
|
@ -44,4 +44,5 @@ namespace Aurora::IO::FS
|
||||
#include "FileReader.hpp"
|
||||
#include "FileWriter.hpp"
|
||||
#include "Resources.hpp"
|
||||
#include "Stat.hpp"
|
||||
#include "Stat.hpp"
|
||||
#include "Async.hpp"
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSAsync.hpp
|
||||
Date: 2021-8-21
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSCV.hpp
|
||||
Date: 2021-8-28
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSEvent.hpp
|
||||
Date: 2021-8-28
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSFd.hpp
|
||||
Date: 2021-8-21
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSGlib.hpp
|
||||
Date: 2021-8-21
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSMutex.hpp
|
||||
Date: 2021-8-28
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSRWMutex.hpp
|
||||
Date: 2021-8-21
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSSemaphore.hpp
|
||||
Date: 2021-8-28
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSTimer.hpp
|
||||
Date: 2021-8-21
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSWin32.hpp
|
||||
Date: 2021-8-21
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: LSX11.hpp
|
||||
Date: 2021-8-21
|
||||
Author: Reece
|
||||
***/
|
@ -5,36 +5,108 @@
|
||||
Date: 2021-8-21
|
||||
Author: Reece
|
||||
***/
|
||||
#pragma once
|
||||
|
||||
enum class ELoopSource
|
||||
namespace Aurora::Loop
|
||||
{
|
||||
eSourceInternalReserved1,
|
||||
eSourceInternalReserved2,
|
||||
eSourceInternalReserved3,
|
||||
eSourceInternalReserved4,
|
||||
|
||||
// unix only
|
||||
eSourceFileDescriptor,
|
||||
|
||||
// generic
|
||||
eSourceSemaphore,
|
||||
eSourceMutex,
|
||||
eSourceTimer,
|
||||
|
||||
// Specific to the runtime subsystem
|
||||
eSourceAsync,
|
||||
|
||||
// glib oses only
|
||||
eSourceGlib,
|
||||
|
||||
// window messge loops
|
||||
eSourceApple,
|
||||
eSourceX11,
|
||||
eSourceWin32
|
||||
};
|
||||
enum class ELoopSource
|
||||
{
|
||||
eSourceInternalReserved1,
|
||||
eSourceInternalReserved2,
|
||||
eSourceInternalReserved3,
|
||||
eSourceInternalReserved4,
|
||||
|
||||
// generic
|
||||
eSourceSemaphore,
|
||||
eSourceCV,
|
||||
eSourceEvent,
|
||||
eSourceMutex,
|
||||
eSourceSRW,
|
||||
eSourceTimer,
|
||||
eSourceHandle,
|
||||
|
||||
// Specific to the runtime subsystem
|
||||
eSourceAsync,
|
||||
|
||||
// glib oses only
|
||||
eSourceGlib,
|
||||
|
||||
// window messge loops
|
||||
eSourceApple,
|
||||
eSourceX11,
|
||||
eSourceWin32
|
||||
};
|
||||
|
||||
class ILoopSource
|
||||
{
|
||||
class ILoopSource
|
||||
{
|
||||
public:
|
||||
virtual bool IsSignaled() = 0;
|
||||
virtual ELoopSource GetType() = 0;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
AUKN_SYM AuList<AuSPtr<ILoopSource>> WaitMultipleObjects(AuList<AuSPtr<ILoopSource>>, AuUInt32 timeout);
|
||||
|
||||
class ILSSemaphore : public ILoopSource
|
||||
{
|
||||
public:
|
||||
virtual bool AddOne() = 0;
|
||||
};
|
||||
|
||||
class ILSEvent : public ILoopSource
|
||||
{
|
||||
public:
|
||||
virtual bool Reset() = 0;
|
||||
};
|
||||
|
||||
class ILSMutex : public ILoopSource
|
||||
{
|
||||
public:
|
||||
virtual bool Unlock() = 0;
|
||||
};
|
||||
|
||||
class IConditionVar : public ILoopSource
|
||||
{
|
||||
public:
|
||||
virtual bool Signal() = 0;
|
||||
virtual bool Broadcast() = 0;
|
||||
};
|
||||
|
||||
class ITimer : public ILoopSource
|
||||
{
|
||||
public:
|
||||
virtual void UpdateTime(AuUInt64 absTimeMs) = 0;
|
||||
};
|
||||
|
||||
AUKN_SYM AuSPtr<IConditionVar> NewLSCondVar(const AuSPtr<Aurora::Threading::> &primitive);
|
||||
AUKN_SYM AuSPtr<IConditionVar> NewLSCondVar(const AuSPtr<ILSMutex> &source);
|
||||
|
||||
AUKN_SYM AuSPtr<ITimer> NewLSTimer(AuUInt64 absTimeMs);
|
||||
AUKN_SYM AuSPtr<ILSMutex> NewLSMutex();
|
||||
AUKN_SYM AuSPtr<ILSEvent> NewLSEvent(bool triggerd = false, bool atomicRelease = true, bool permitMultipleTriggers = false);
|
||||
AUKN_SYM AuSPtr<ILSSemaphore> NewLSSemaphore(AuUInt32 initialCount = 0);
|
||||
AUKN_SYM AuSPtr<ILoopSource> NewLSAsync();
|
||||
AUKN_SYM AuSPtr<ILoopSource> NewLSWin32Source();
|
||||
AUKN_SYM AuSPtr<ILoopSource> NewLSAppleSource();
|
||||
AUKN_SYM AuSPtr<ILoopSource> NewLSOSHandle(AuUInt);
|
||||
|
||||
#if defined(X_PROTOCOL)
|
||||
static AuSPtr<ILoopSource> NewLSX11(Display *display)
|
||||
{
|
||||
return NewLSOSHandle(ConnectionNumber(display));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(AURORA_IS_POSIX_DERIVED)
|
||||
static AuSPtr<ILoopSource> NewLSFd(int fd)
|
||||
{
|
||||
return NewLSOSHandle(fd);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
static AuSPtr<ILoopSource> NewLSHandle(HANDLE handle)
|
||||
{
|
||||
return NewLSOSHandle(static_cast<AuUInt>(handle));
|
||||
}
|
||||
#endif
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: Wait.hpp
|
||||
Date: 2021-8-21
|
||||
Author: Reece
|
||||
***/
|
@ -116,8 +116,8 @@ namespace Aurora
|
||||
/// In conjunction with !enableStdPassthrough, enables stdout logging
|
||||
bool enableStdIn {true};
|
||||
|
||||
/// In conjunction with enableStdPassthrough, enables Aurora::Console::WriteStd to write binary
|
||||
/// In conjunction with !enableStdPassthrough, enables stdin logger
|
||||
/// In conjunction with enableStdPassthrough, enables Aurora::Console::WriteStd to write binary, otherwise enables the console logger
|
||||
/// In conjunction with !enableStdPassthrough, enables stdin cmd processing, otherwise disables stdin input
|
||||
bool enableStdOut {true};
|
||||
|
||||
/// Use WxWidgets when possible
|
||||
|
@ -34,5 +34,5 @@ namespace Aurora::Threading::Primitives
|
||||
virtual void Set() = 0;
|
||||
};
|
||||
|
||||
AUKN_SHARED_API(Event, IEvent, bool triggerd, bool atomicRelease, bool permitMultipleTriggers = false);
|
||||
AUKN_SHARED_API(Event, IEvent, bool triggerd = false, bool atomicRelease = true, bool permitMultipleTriggers = false);
|
||||
}
|
@ -473,4 +473,9 @@ struct is_base_of_template_impl_au
|
||||
};
|
||||
|
||||
template < template <typename...> class base,typename derived>
|
||||
using AuIsBaseOfTemplate = typename is_base_of_template_impl_au<base,derived>::type;
|
||||
using AuIsBaseOfTemplate = typename is_base_of_template_impl_au<base,derived>::type;
|
||||
|
||||
static inline bool AuTestBit(AuUInt32 value, AuUInt8 idx)
|
||||
{
|
||||
return value & (1 << idx);
|
||||
}
|
@ -14,9 +14,9 @@ namespace Aurora::Console::ConsoleFIO
|
||||
static Threading::Primitives::RWLockUnique_t gLogMutex;
|
||||
static IO::FS::OpenWriteUnique_t gFileHandle;
|
||||
|
||||
static const auto & gLogConfig = gRuntimeConfig.console.fio;
|
||||
static const auto &gLogConfig = gRuntimeConfig.console.fio;
|
||||
|
||||
static AuString GetLogDirectory()
|
||||
AuString GetLogDirectory()
|
||||
{
|
||||
AuString path;
|
||||
AuString procName;
|
||||
@ -70,7 +70,7 @@ namespace Aurora::Console::ConsoleFIO
|
||||
AuList<AuString> files;
|
||||
AuBST<AuString, IO::FS::Stat> fileMeta;
|
||||
AuUInt32 size {};
|
||||
|
||||
|
||||
auto baseLogPath = GetLogDirectory();
|
||||
|
||||
IO::FS::FilesInDirectory(baseLogPath, files);
|
||||
@ -113,10 +113,10 @@ namespace Aurora::Console::ConsoleFIO
|
||||
static bool OpenLogFile()
|
||||
{
|
||||
AuString path;
|
||||
|
||||
|
||||
auto tm = Time::ToCivilTime(Time::CurrentClockMS());
|
||||
|
||||
path = fmt::format("{}/{:04}-{:02}-{:02}T{:02}-{:02}-{:02}Z.txt",
|
||||
path = fmt::format("{}/{:04}-{:02}-{:02}T{:02}-{:02}-{:02}Z.txt",
|
||||
GetLogDirectory(),
|
||||
tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
|
||||
tm.tm_hour, tm.tm_min, tm.tm_sec);
|
||||
@ -142,21 +142,21 @@ namespace Aurora::Console::ConsoleFIO
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
gLogMutex = Threading::Primitives::RWLockUnique();
|
||||
if (!gLogMutex)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Console::Hooks::AddFunctionalHook([&](const Console::ConsoleMessage &string) -> void
|
||||
{
|
||||
AU_LOCK_GUARD(gLogMutex->AsWritable());
|
||||
auto str = string.ToSimplified();
|
||||
|
||||
|
||||
gLogBuffer.reserve(gLogBuffer.size() + str.size() + 2);
|
||||
|
||||
gLogBuffer.insert(gLogBuffer.end(), reinterpret_cast<AuUInt8*>(str.data()), reinterpret_cast<AuUInt8*>(str.data()) + str.size());
|
||||
gLogBuffer.insert(gLogBuffer.end(), reinterpret_cast<AuUInt8 *>(str.data()), reinterpret_cast<AuUInt8 *>(str.data()) + str.size());
|
||||
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
gLogBuffer.insert(gLogBuffer.end(), AuUInt8('\r'));
|
||||
|
@ -13,5 +13,6 @@ namespace Aurora::Console::ConsoleFIO
|
||||
void Pump();
|
||||
void Exit();
|
||||
void Flush();
|
||||
AuString GetLogDirectory();
|
||||
void FIOCleanup();
|
||||
}
|
@ -77,6 +77,60 @@ namespace Aurora::Console::ConsoleStd
|
||||
}
|
||||
#endif
|
||||
|
||||
static void StartLogger()
|
||||
{
|
||||
if (gRuntimeConfig.console.enableStdPassthrough && gRuntimeConfig.console.enableStdOut)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Console::Hooks::AddFunctionalHook([](const Aurora::Console::ConsoleMessage &string) -> void
|
||||
{
|
||||
#if (defined(DEBUG) || defined(STAGING)) && defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
auto debugLine = string.ToSimplified() + "\r\n";
|
||||
OutputDebugStringW(Locale::ConvertFromUTF8(debugLine).c_str());
|
||||
#endif
|
||||
|
||||
if (!gRuntimeConfig.console.enableStdOut)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto writeLine = string.ToConsole();
|
||||
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
writeLine += '\r';
|
||||
#endif
|
||||
writeLine += '\n';
|
||||
|
||||
#if defined(IO_POSIX_STREAMS)
|
||||
if (Locale::GetInternalCodePage() == Locale::ECodePage::eUTF8)
|
||||
{
|
||||
WriteStdOut(writeLine.data(), writeLine.size());
|
||||
}
|
||||
else
|
||||
{
|
||||
AuString slow;
|
||||
slow.resize(writeLine.size() * 4);
|
||||
auto len = Locale::Encoding::EncodeUTF8(writeLine, reinterpret_cast<AuUInt8 *>(slow.data()), slow.size(), Locale::ECodePage::eSysUnk);
|
||||
if (len.first != 0)
|
||||
{
|
||||
WriteStdOut(slow.data(), len.second);
|
||||
}
|
||||
else
|
||||
{
|
||||
// better write this than nothing
|
||||
WriteStdOut(writeLine.data(), writeLine.size());
|
||||
}
|
||||
}
|
||||
|
||||
#elif defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
WriteStdOut(writeLine.data(), writeLine.size());
|
||||
#endif
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
static bool gConsoleStarted = false;
|
||||
@ -126,7 +180,7 @@ namespace Aurora::Console::ConsoleStd
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Set binary mode if redirecting stdin to user
|
||||
if (gRuntimeConfig.console.enableStdPassthrough && gRuntimeConfig.console.enableStdOut)
|
||||
{
|
||||
SetConsoleMode(gOutputStream, 0);
|
||||
@ -149,10 +203,11 @@ namespace Aurora::Console::ConsoleStd
|
||||
SysAssert(ok, "Couldn't maintain binary stdin stream");
|
||||
}
|
||||
}
|
||||
|
||||
gTerminateConsole = CreateEvent(nullptr, true, false, nullptr);
|
||||
|
||||
gWin32Thread = CreateThread(nullptr, 0, StdInWin32Thread, nullptr, 0, nullptr);
|
||||
else
|
||||
{
|
||||
gTerminateConsole = CreateEvent(nullptr, true, false, nullptr);
|
||||
gWin32Thread = CreateThread(nullptr, 0, StdInWin32Thread, nullptr, 0, nullptr);
|
||||
}
|
||||
|
||||
#elif defined(AURORA_IS_POSIX_DERIVED)
|
||||
|
||||
@ -164,51 +219,7 @@ namespace Aurora::Console::ConsoleStd
|
||||
SysAssert(gInputStream, "Couldn't allocate input stream handler");
|
||||
SysAssert(gOutputStream, "Couldn't allocate output stream handler");
|
||||
|
||||
Console::Hooks::AddFunctionalHook([](const Aurora::Console::ConsoleMessage &string) -> void
|
||||
{
|
||||
#if (defined(DEBUG) || defined(STAGING)) && defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
auto debugLine = string.ToSimplified() + "\r\n";
|
||||
OutputDebugStringW(Locale::ConvertFromUTF8(debugLine).c_str());
|
||||
#endif
|
||||
|
||||
if (!gRuntimeConfig.console.enableStdOut)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto writeLine = string.ToConsole();
|
||||
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
writeLine += '\r';
|
||||
#endif
|
||||
writeLine += '\n';
|
||||
|
||||
#if defined(IO_POSIX_STREAMS)
|
||||
if (Locale::GetInternalCodePage() == Locale::ECodePage::eUTF8)
|
||||
{
|
||||
WriteStdOut(writeLine.data(), writeLine.size());
|
||||
}
|
||||
else
|
||||
{
|
||||
AuString slow;
|
||||
slow.resize(writeLine.size() * 4);
|
||||
auto len = Locale::Encoding::EncodeUTF8(writeLine, reinterpret_cast<AuUInt8 *>(slow.data()), slow.size(), Locale::ECodePage::eSysUnk);
|
||||
if (len.first != 0)
|
||||
{
|
||||
WriteStdOut(slow.data(), len.second);
|
||||
}
|
||||
else
|
||||
{
|
||||
// better write this than nothing
|
||||
WriteStdOut(writeLine.data(), writeLine.size());
|
||||
}
|
||||
}
|
||||
|
||||
#elif defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
WriteStdOut(writeLine.data(), writeLine.size());
|
||||
#endif
|
||||
|
||||
});
|
||||
StartLogger();
|
||||
}
|
||||
|
||||
void Init()
|
||||
@ -249,7 +260,6 @@ namespace Aurora::Console::ConsoleStd
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Start();
|
||||
}
|
||||
@ -289,7 +299,7 @@ namespace Aurora::Console::ConsoleStd
|
||||
return (FD_ISSET(0, &fds));
|
||||
#elif defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
// Inline non-blocking is not legal on windows.
|
||||
// One can force it with the overlapped flag, seemingly vaid since win8, but defined as illegal since the 90s
|
||||
// One can force it with the overlapped flag, seemingly valid since win8, but defined as illegal since the 90s
|
||||
return false;
|
||||
#else
|
||||
return false;
|
||||
@ -441,18 +451,23 @@ namespace Aurora::Console::ConsoleStd
|
||||
|
||||
static bool AsyncReadAnyOrReadStreamBlock()
|
||||
{
|
||||
if (SyncReadConsole())
|
||||
if (!SyncReadConsole())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (gRuntimeConfig.console.enableStdPassthrough && gRuntimeConfig.console.enableStdIn)
|
||||
{
|
||||
ProcessLinesSysCP();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
ProcessLinesSysCP();
|
||||
return true;
|
||||
}
|
||||
|
||||
void Pump()
|
||||
{
|
||||
if (!gRuntimeConfig.console.enableStdIn)
|
||||
if (!gRuntimeConfig.console.enableStdPassthrough && !gRuntimeConfig.console.enableStdIn)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -7,8 +7,15 @@
|
||||
***/
|
||||
#include <RuntimeInternal.hpp>
|
||||
#include "ConsoleWxWidgets.hpp"
|
||||
#include <Console/ConsoleFIO/ConsoleFIO.hpp>
|
||||
|
||||
#if defined(_AUHAS_WXWIDGETS)
|
||||
|
||||
#if defined(AURORA_PLATFORM_WIN32)
|
||||
#include <Uxtheme.h>
|
||||
#include <Extensions/Win32/DarkTheme.hpp>
|
||||
#endif
|
||||
|
||||
#include <wx/wxprec.h>
|
||||
#include <wx/wx.h>
|
||||
|
||||
@ -16,8 +23,6 @@
|
||||
#include <wx/wx.h>
|
||||
#include <wx/richtext/richtextctrl.h>
|
||||
|
||||
static bool DarkModeEnabled();
|
||||
|
||||
class ConsoleFrame;
|
||||
|
||||
static AuList<Aurora::Console::ConsoleMessage> gPendingLines;
|
||||
@ -86,6 +91,8 @@ private:
|
||||
void OnExit(wxCommandEvent &event);
|
||||
void OnAbout(wxCommandEvent &event);
|
||||
void OnBugWrite(wxCommandEvent &event);
|
||||
void OnIssueWrite(wxCommandEvent &event);
|
||||
void OpenLogDir(wxCommandEvent &event);
|
||||
void OnInit(wxWindowCreateEvent &event);
|
||||
void OnShow(wxWindowCreateEvent &event);
|
||||
void OnCmd(wxCommandEvent &event);
|
||||
@ -97,9 +104,6 @@ private:
|
||||
wxDECLARE_EVENT_TABLE();
|
||||
wxRichTextCtrl *richtextbox_;
|
||||
wxTextCtrl *commandbox_;
|
||||
wxMenuBar *menuBar_;
|
||||
wxBoxSizer *sizer_;
|
||||
AuList<WxSplitterLine *> _splitters;
|
||||
wxTimer timer_;
|
||||
};
|
||||
|
||||
@ -107,15 +111,18 @@ enum
|
||||
{
|
||||
ID_Hello = 1,
|
||||
ID_BLACKBOX,
|
||||
ID_WRITE_REPORT,
|
||||
ID_OPENTXT,
|
||||
ID_WRITE_CARD,
|
||||
ID_WRITE_BUG,
|
||||
ID_OPEN_LOG_DIR,
|
||||
ID_OPENBIN
|
||||
};
|
||||
wxBEGIN_EVENT_TABLE(ConsoleFrame, wxFrame)
|
||||
EVT_MENU(ID_Hello, ConsoleFrame::OnHello)
|
||||
EVT_MENU(wxID_EXIT, ConsoleFrame::OnExit)
|
||||
EVT_MENU(wxID_ABOUT, ConsoleFrame::OnAbout)
|
||||
EVT_MENU(ID_WRITE_REPORT, ConsoleFrame::OnBugWrite)
|
||||
EVT_MENU(ID_WRITE_CARD, ConsoleFrame::OnIssueWrite)
|
||||
EVT_MENU(ID_WRITE_BUG, ConsoleFrame::OnBugWrite)
|
||||
EVT_MENU(ID_OPEN_LOG_DIR, ConsoleFrame::OpenLogDir)
|
||||
EVT_WINDOW_CREATE(ConsoleFrame::OnInit)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
@ -147,16 +154,12 @@ void ConsoleFrame::OnCmd(wxCommandEvent &event)
|
||||
|
||||
WxSplitterLine *ConsoleFrame::NewSplitter(wxSize splitter, wxColor color)
|
||||
{
|
||||
auto re = new WxSplitterLine(splitter, color, this, -1);
|
||||
_splitters.push_back(re);
|
||||
return re;
|
||||
return new WxSplitterLine(splitter, color, this, -1);
|
||||
}
|
||||
|
||||
WxSplitterLine *ConsoleFrame::NewSplitter(wxSize splitter)
|
||||
{
|
||||
auto re = new WxSplitterLine(splitter, {}, this, -1);
|
||||
_splitters.push_back(re);
|
||||
return re;
|
||||
return new WxSplitterLine(splitter, {}, this, -1);
|
||||
}
|
||||
|
||||
void ConsoleFrame::WriteLine(const Aurora::Console::ConsoleMessage &string)
|
||||
@ -197,7 +200,7 @@ void ConsoleFrame::WriteLine(const Aurora::Console::ConsoleMessage &string)
|
||||
|
||||
auto writeLine = string.ToSimplified();
|
||||
|
||||
bool useColor = DarkModeEnabled();
|
||||
bool useColor = true;// DarkModeEnabled();
|
||||
|
||||
auto color = useColor ? ColorMap[static_cast<int>(string.color)] : wxColor(0, 0, 0);
|
||||
auto bold = useColor ? HahaBald[static_cast<int>(string.color)] : false;
|
||||
@ -250,7 +253,7 @@ ConsoleFrame::ConsoleFrame(const wxString &title, const wxPoint &pos, const wxSi
|
||||
: wxFrame(NULL, wxID_ANY, title, pos, size)
|
||||
{
|
||||
#if defined(AURORA_PLATFORM_WIN32)
|
||||
bool useWin32DarkHack = DarkModeEnabled();
|
||||
bool useWin32DarkHack = Aurora::Extensions::Win32::g_darkModeSupported;
|
||||
#else
|
||||
bool useWin32DarkHack = false;
|
||||
#endif
|
||||
@ -262,6 +265,7 @@ ConsoleFrame::ConsoleFrame(const wxString &title, const wxPoint &pos, const wxSi
|
||||
// \ V V / (_| | | | (__| | | | | | | | | __/\__ \ | (_| | | | | __/ (_| | (_| | |_| |_| |_| |_|
|
||||
// \_/\_/ \__,_|_| \___|_| |_|_| |_| |_|\___||___/ \__,_|_| |_|\___|\__,_|\__,_| (_) (_) (_) (_)
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
static const auto kEnableDark = (useWin32DarkHack) ||
|
||||
@ -286,17 +290,16 @@ ConsoleFrame::ConsoleFrame(const wxString &title, const wxPoint &pos, const wxSi
|
||||
// 1080, 550
|
||||
this->SetClientSize(this->FromDIP(wxSize(903, 434)));
|
||||
|
||||
menuBar_ = _new wxMenuBar();
|
||||
auto menuBar_ = _new wxMenuBar();
|
||||
if (!menuBar_) return;
|
||||
|
||||
{
|
||||
auto menuFile = _new wxMenu();
|
||||
if (!menuFile) return;
|
||||
|
||||
|
||||
menuFile->Append(wxID_SAVE, "Export text log");
|
||||
menuFile->AppendSeparator();
|
||||
menuFile->Append(ID_OPENTXT, "Open text log");
|
||||
menuFile->Append(ID_OPENBIN, "Open binary log");
|
||||
menuFile->Append(ID_OPEN_LOG_DIR, "Open log directory");
|
||||
|
||||
menuBar_->Append(menuFile, "&Logs");
|
||||
}
|
||||
@ -306,8 +309,10 @@ ConsoleFrame::ConsoleFrame(const wxString &title, const wxPoint &pos, const wxSi
|
||||
if (!menuHelp) return;
|
||||
|
||||
menuHelp->Append(ID_BLACKBOX, "&Report application state to the black box");
|
||||
menuHelp->Append(ID_WRITE_REPORT, "&[Internal] Write a bug report");
|
||||
menuHelp->Append(ID_WRITE_REPORT, "&[Public] Write a bug report");
|
||||
#if defined(STAGING) || defined(DEBUG)
|
||||
menuHelp->Append(ID_WRITE_CARD, "&[Internal] Write a bug report");
|
||||
#endif
|
||||
menuHelp->Append(ID_WRITE_BUG, "&[Public] Write a bug report");
|
||||
menuBar_->Append(menuHelp, "&Bugs");
|
||||
}
|
||||
|
||||
@ -317,8 +322,8 @@ ConsoleFrame::ConsoleFrame(const wxString &title, const wxPoint &pos, const wxSi
|
||||
this->Connect(wxEVT_SHOW, wxWindowCreateEventHandler(ConsoleFrame::OnShow));
|
||||
}
|
||||
|
||||
sizer_ = _new wxBoxSizer(wxVERTICAL);
|
||||
if (!sizer_) return;
|
||||
auto sizer = _new wxBoxSizer(wxVERTICAL);
|
||||
if (!sizer) return;
|
||||
|
||||
auto font = this->GetFont();
|
||||
font.SetPointSize(9);
|
||||
@ -334,12 +339,12 @@ ConsoleFrame::ConsoleFrame(const wxString &title, const wxPoint &pos, const wxSi
|
||||
if (!filterBarContainer) return {};
|
||||
|
||||
auto filterBar = _new wxBoxSizer(wxHORIZONTAL);
|
||||
if (!filterBar) return{};
|
||||
if (!filterBar) return{}; // TODO: a leak idc about
|
||||
|
||||
auto filterBox = _new wxTextCtrl(this, -1, wxEmptyString,
|
||||
wxDefaultPosition, alt ? wxDefaultSize : wxSize(400, 20),
|
||||
(kTextBoxHandlePad ? wxBORDER_NONE : 0) | wxTE_PROCESS_ENTER | wxEXPAND);
|
||||
if (!filterBox) return{};
|
||||
if (!filterBox) return{}; // TODO: a leak idc about
|
||||
|
||||
filterBox->SetMinSize({minx, miny});
|
||||
|
||||
@ -502,14 +507,14 @@ ConsoleFrame::ConsoleFrame(const wxString &title, const wxPoint &pos, const wxSi
|
||||
addHeaderPanel(header, checkboxesContainer, true, true, false, true, kHeaderPadUpDown, kHeaderPadLeftRight);
|
||||
}
|
||||
|
||||
sizer_->Add(header, 0, wxEXPAND);
|
||||
sizer->Add(header, 0, wxEXPAND);
|
||||
|
||||
|
||||
// Shadow down
|
||||
if (/*useWin32DarkHack*/ true)
|
||||
{
|
||||
sizer_->Add(NewSplitter(wxSize(kTextboxWin32PadInner, kTextboxWin32PadInner), kTextBoxInner), 0, wxEXPAND);
|
||||
sizer_->Add(NewSplitter(wxSize(kTextboxWin32PadOutter, kTextboxWin32PadOutter), kTextBoxOutter), 0, wxEXPAND);
|
||||
sizer->Add(NewSplitter(wxSize(kTextboxWin32PadInner, kTextboxWin32PadInner), kTextBoxInner), 0, wxEXPAND);
|
||||
sizer->Add(NewSplitter(wxSize(kTextboxWin32PadOutter, kTextboxWin32PadOutter), kTextBoxOutter), 0, wxEXPAND);
|
||||
}
|
||||
|
||||
// Rich text box
|
||||
@ -526,25 +531,25 @@ ConsoleFrame::ConsoleFrame(const wxString &title, const wxPoint &pos, const wxSi
|
||||
this->Connect(wxEVT_SHOW, wxWindowCreateEventHandler(ConsoleFrame::OnShow));
|
||||
}
|
||||
|
||||
sizer_->Add(richtextbox_, 1, wxEXPAND);
|
||||
sizer->Add(richtextbox_, 1, wxEXPAND);
|
||||
}
|
||||
|
||||
// Shadow down
|
||||
if (/*useWin32DarkHack*/ true)
|
||||
{
|
||||
sizer_->Add(NewSplitter(wxSize(kTextboxWin32PadInner, kTextboxWin32PadInner), kTextBoxInner), 0, wxEXPAND);
|
||||
sizer_->Add(NewSplitter(wxSize(kTextboxWin32PadOutter, kTextboxWin32PadOutter), kTextBoxOutter), 0, wxEXPAND);
|
||||
sizer->Add(NewSplitter(wxSize(kTextboxWin32PadInner, kTextboxWin32PadInner), kTextBoxInner), 0, wxEXPAND);
|
||||
sizer->Add(NewSplitter(wxSize(kTextboxWin32PadOutter, kTextboxWin32PadOutter), kTextBoxOutter), 0, wxEXPAND);
|
||||
}
|
||||
|
||||
// Command Box
|
||||
{
|
||||
commandbox_ = addTextbox(sizer_, 0, kTextboxHeight, true);
|
||||
commandbox_ = addTextbox(sizer, 0, kTextboxHeight, true);
|
||||
commandbox_->SetHint("Type a command here");
|
||||
commandbox_->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(ConsoleFrame::OnCmd));
|
||||
}
|
||||
|
||||
|
||||
SetSizer(sizer_);
|
||||
SetSizer(sizer);
|
||||
SetMenuBar(menuBar_);
|
||||
// SetAutoLayout(true);
|
||||
|
||||
@ -553,23 +558,16 @@ ConsoleFrame::ConsoleFrame(const wxString &title, const wxPoint &pos, const wxSi
|
||||
gWxConsoleReady = true;
|
||||
}
|
||||
|
||||
#if defined(AURORA_PLATFORM_WIN32)
|
||||
#include <Uxtheme.h>
|
||||
#include <Extensions/Win32/DarkTheme.hpp>
|
||||
|
||||
static bool DarkModeEnabled()
|
||||
{
|
||||
return Aurora::Extensions::Win32::g_darkModeSupported;
|
||||
}
|
||||
|
||||
void ConsoleFrame::OnInit(wxWindowCreateEvent &event)
|
||||
{
|
||||
OnShow(event);
|
||||
}
|
||||
|
||||
#if defined(AURORA_PLATFORM_WIN32)
|
||||
|
||||
void ConsoleFrame::OnShow(wxWindowCreateEvent &event)
|
||||
{
|
||||
if (!DarkModeEnabled()) return;
|
||||
if (!Aurora::Extensions::Win32::g_darkModeSupported) return;
|
||||
|
||||
auto handle = event.GetWindow()->GetHWND();
|
||||
Aurora::Extensions::Win32::AllowDarkModeForWindow(handle, true);
|
||||
@ -584,9 +582,6 @@ ConsoleFrame::ConsoleFrame(const wxString &title, const wxPoint &pos, const wxSi
|
||||
UpdateWindow(handle);
|
||||
}
|
||||
#else
|
||||
void ConsoleFrame::OnInit(wxWindowCreateEvent &event)
|
||||
{}
|
||||
|
||||
void ConsoleFrame::OnShow(wxWindowCreateEvent &event)
|
||||
{}
|
||||
|
||||
@ -610,12 +605,22 @@ void ConsoleFrame::OnHello(wxCommandEvent &event)
|
||||
{
|
||||
LogGame("nani?!");
|
||||
}
|
||||
|
||||
|
||||
void ConsoleFrame::OnBugWrite(wxCommandEvent &event)
|
||||
{
|
||||
Aurora::Processes::OpenUri(gRuntimeConfig.console.supportPublic);
|
||||
}
|
||||
|
||||
void ConsoleFrame::OnIssueWrite(wxCommandEvent &event)
|
||||
{
|
||||
Aurora::Processes::OpenUri(gRuntimeConfig.console.supportInternal);
|
||||
}
|
||||
|
||||
void ConsoleFrame::OpenLogDir(wxCommandEvent &event)
|
||||
{
|
||||
Aurora::Processes::OpenFile(Aurora::Console::ConsoleFIO::GetLogDirectory());
|
||||
}
|
||||
|
||||
namespace Aurora::Console::ConsoleWxWidgets
|
||||
{
|
||||
static void WxWidgetsPump();
|
||||
|
@ -21,38 +21,46 @@ namespace Aurora::Crypto::PEM
|
||||
str.reserve(src.size());
|
||||
|
||||
Parse::SplitNewlines(src,
|
||||
[&](const AuString &src)
|
||||
{
|
||||
if (lines == 0)
|
||||
[&](const AuString &src)
|
||||
{
|
||||
fail |= (int)(src != begin);
|
||||
lines++;
|
||||
return;
|
||||
}
|
||||
if (lines == 0)
|
||||
{
|
||||
fail |= (int)(src != begin);
|
||||
lines++;
|
||||
return;
|
||||
}
|
||||
|
||||
if (src == end)
|
||||
{
|
||||
fail |= (int)!Parse::Base64Decode(str, buf);
|
||||
finished = true;
|
||||
return;
|
||||
}
|
||||
if (src == end)
|
||||
{
|
||||
fail |= (int)!Parse::Base64Decode(str, buf);
|
||||
finished = true;
|
||||
return;
|
||||
}
|
||||
|
||||
str += src;
|
||||
});
|
||||
str += src;
|
||||
}
|
||||
);
|
||||
|
||||
return fail ? false : finished;
|
||||
}
|
||||
|
||||
static AuString SerializePEM(const AuString &begin, const AuString &end, const AuList<AuUInt8> &buf)
|
||||
{
|
||||
auto delm = Aurora::Build::kCurrentVendor == Aurora::Build::EVendor::eGenericMicrosoft ? "\r\n" : "\n";
|
||||
AuString ret;
|
||||
ret += begin;
|
||||
ret += '\n';
|
||||
ret += delm;
|
||||
AuString b64;
|
||||
if (!Parse::Base64Encode(buf, b64))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
else
|
||||
{
|
||||
b64 = Parse::SplitStringDelm(b64, delm, 16);
|
||||
}
|
||||
ret += b64;
|
||||
ret += '\n';
|
||||
ret += delm;
|
||||
ret += end;
|
||||
return ret;
|
||||
}
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "Hashing/Hashing.hpp"
|
||||
#include "Debug/Debug.hpp"
|
||||
#include "Async/Async.hpp"
|
||||
#include "HWInfo/HWInfo.hpp"
|
||||
#if defined(AURORA_PLATFORM_WIN32)
|
||||
#include "Extensions/Win32/DarkTheme.hpp"
|
||||
#endif
|
||||
@ -37,6 +38,7 @@ static void Init()
|
||||
Aurora::RNG::Init();
|
||||
Aurora::Hashing::InitHashing();
|
||||
Aurora::Async::InitAsync();
|
||||
Aurora::HWInfo::Init();
|
||||
}
|
||||
|
||||
static void Pump()
|
||||
|
@ -23,7 +23,7 @@ int rsa_basic_export(unsigned char *out, unsigned long *outlen, const rsa_key *k
|
||||
if (key->type == PK_PUBLIC)
|
||||
{
|
||||
return CRYPT_INVALID_ARG;
|
||||
};
|
||||
}
|
||||
|
||||
/* private key */
|
||||
/* output is
|
||||
@ -110,7 +110,7 @@ int rsa_pkcs8_export(unsigned char *out, unsigned long *outlen, const rsa_key *k
|
||||
if (key->type == PK_PUBLIC)
|
||||
{
|
||||
return CRYPT_INVALID_ARG;
|
||||
};
|
||||
}
|
||||
|
||||
void *keyType;
|
||||
|
||||
|
@ -9,3 +9,458 @@
|
||||
#include "HWInfo.hpp"
|
||||
#include "CpuInfo.hpp"
|
||||
|
||||
#if defined(AURORA_IS_BSD_DERIVED)
|
||||
#include <sys/types.h>
|
||||
#include <sys/sysctl.h>
|
||||
#endif
|
||||
|
||||
namespace Aurora::HWInfo
|
||||
{
|
||||
static CpuInfo gCpuInfo;
|
||||
|
||||
union CPUIdContext
|
||||
{
|
||||
struct
|
||||
{
|
||||
AuUInt32 eax;
|
||||
AuUInt32 ebx;
|
||||
AuUInt32 ecx;
|
||||
AuUInt32 edx;
|
||||
};
|
||||
int regs[4];
|
||||
};
|
||||
|
||||
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||
#if defined(AURORA_COMPILER_MSVC)
|
||||
static inline CPUIdContext cpuid(AuUInt32 a)
|
||||
{
|
||||
CPUIdContext context;
|
||||
__cpuid(context.regs, a);
|
||||
return context;
|
||||
}
|
||||
#elif defined(AURORA_COMPILER_CLANG) || defined(AURORA_COMPILER_GCC)
|
||||
static inline CPUIdContext cpuid(AuUInt32 a)
|
||||
{
|
||||
CPUIdContext context;
|
||||
__get_cpuid(a, &context.eax, &context.ebx, &context.ecx, &context.edx);
|
||||
return context;
|
||||
}
|
||||
#else
|
||||
static inline CPUIdContext cpuid(AuUInt32 a)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
static inline CPUIdContext cpuid(AuUInt32 a)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
#endif
|
||||
|
||||
bool CpuId::SSE3()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 0);
|
||||
}
|
||||
|
||||
bool CpuId::PCLMULQDQ()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 1);
|
||||
}
|
||||
|
||||
bool CpuId::MONITOR()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 3);
|
||||
}
|
||||
|
||||
bool CpuId::SSSE3()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 9);
|
||||
}
|
||||
|
||||
bool CpuId::FMA()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 12);
|
||||
}
|
||||
|
||||
bool CpuId::CMPXCHG16B()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 13);
|
||||
}
|
||||
|
||||
bool CpuId::SSE41()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 19);
|
||||
}
|
||||
|
||||
bool CpuId::SSE42()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 20);
|
||||
}
|
||||
|
||||
bool CpuId::MOVBE()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 22);
|
||||
}
|
||||
|
||||
bool CpuId::POPCNT()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 23);
|
||||
}
|
||||
|
||||
bool CpuId::AES()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 25);
|
||||
}
|
||||
|
||||
bool CpuId::XSAVE()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 26);
|
||||
}
|
||||
|
||||
bool CpuId::OSXSAVE()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 27);
|
||||
}
|
||||
|
||||
bool CpuId::AVX()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 28);
|
||||
}
|
||||
|
||||
bool CpuId::F16C()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 29);
|
||||
}
|
||||
|
||||
bool CpuId::RDRAND()
|
||||
{
|
||||
return AuTestBit(f_1_ECX, 30);
|
||||
}
|
||||
|
||||
bool CpuId::MSR()
|
||||
{
|
||||
return AuTestBit(f_1_EDX, 5);
|
||||
}
|
||||
|
||||
bool CpuId::CX8()
|
||||
{
|
||||
return AuTestBit(f_1_EDX, 8);
|
||||
}
|
||||
|
||||
bool CpuId::SEP()
|
||||
{
|
||||
return AuTestBit(f_1_EDX, 11);
|
||||
}
|
||||
|
||||
bool CpuId::CMOV()
|
||||
{
|
||||
return AuTestBit(f_1_EDX, 15);
|
||||
}
|
||||
|
||||
bool CpuId::CLFSH()
|
||||
{
|
||||
return AuTestBit(f_1_EDX, 19);
|
||||
}
|
||||
|
||||
bool CpuId::MMX()
|
||||
{
|
||||
return AuTestBit(f_1_EDX, 23);
|
||||
}
|
||||
|
||||
bool CpuId::FXSR()
|
||||
{
|
||||
return AuTestBit(f_1_EDX, 24);
|
||||
}
|
||||
|
||||
bool CpuId::SSE()
|
||||
{
|
||||
return AuTestBit(f_1_EDX, 25);
|
||||
}
|
||||
|
||||
bool CpuId::SSE2()
|
||||
{
|
||||
return AuTestBit(f_1_EDX, 26);
|
||||
}
|
||||
|
||||
bool CpuId::FSGSBASE()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 0);
|
||||
}
|
||||
|
||||
bool CpuId::BMI1()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 3);
|
||||
}
|
||||
|
||||
bool CpuId::HLE()
|
||||
{
|
||||
return AuTestBit(isIntel && f_7_EBX, 4);
|
||||
}
|
||||
|
||||
bool CpuId::AVX2()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 5);
|
||||
}
|
||||
|
||||
bool CpuId::BMI2()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 8);
|
||||
}
|
||||
|
||||
bool CpuId::ERMS()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 9);
|
||||
}
|
||||
|
||||
bool CpuId::INVPCID()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 10);
|
||||
}
|
||||
|
||||
bool CpuId::RTM()
|
||||
{
|
||||
return AuTestBit(isIntel && f_7_EBX, 11);
|
||||
}
|
||||
|
||||
bool CpuId::AVX512F()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 16);
|
||||
}
|
||||
|
||||
bool CpuId::RDSEED()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 18);
|
||||
}
|
||||
|
||||
bool CpuId::ADX()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 19);
|
||||
}
|
||||
|
||||
bool CpuId::AVX512PF()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 26);
|
||||
}
|
||||
|
||||
bool CpuId::AVX512ER()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 27);
|
||||
}
|
||||
|
||||
bool CpuId::AVX512CD()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 28);
|
||||
}
|
||||
|
||||
bool CpuId::SHA()
|
||||
{
|
||||
return AuTestBit(f_7_EBX, 29);
|
||||
}
|
||||
|
||||
bool CpuId::PREFETCHWT1()
|
||||
{
|
||||
return AuTestBit(f_7_ECX, 0);
|
||||
}
|
||||
|
||||
bool CpuId::LAHF()
|
||||
{
|
||||
return AuTestBit(f_81_ECX, 0);
|
||||
}
|
||||
|
||||
bool CpuId::LZCNT()
|
||||
{
|
||||
return AuTestBit(isIntel && f_81_ECX, 5);
|
||||
}
|
||||
|
||||
bool CpuId::ABM()
|
||||
{
|
||||
return AuTestBit(isAMD && f_81_ECX, 5);
|
||||
}
|
||||
|
||||
bool CpuId::SSE4a()
|
||||
{
|
||||
return AuTestBit(isAMD && f_81_ECX, 6);
|
||||
}
|
||||
|
||||
bool CpuId::XOP()
|
||||
{
|
||||
return AuTestBit(isAMD && f_81_ECX, 11);
|
||||
}
|
||||
|
||||
bool CpuId::TBM()
|
||||
{
|
||||
return AuTestBit(isAMD && f_81_ECX, 21);
|
||||
}
|
||||
|
||||
bool CpuId::SYSCALL()
|
||||
{
|
||||
return AuTestBit(isIntel && f_81_EDX, 11);
|
||||
}
|
||||
|
||||
bool CpuId::MMXEXT()
|
||||
{
|
||||
return AuTestBit(isAMD && f_81_EDX, 22);
|
||||
}
|
||||
|
||||
bool CpuId::RDTSCP()
|
||||
{
|
||||
return AuTestBit(isIntel && f_81_EDX, 27);
|
||||
}
|
||||
|
||||
bool CpuId::_3DNOWEXT()
|
||||
{
|
||||
return AuTestBit(isAMD && f_81_EDX, 30);
|
||||
}
|
||||
|
||||
bool CpuId::_3DNOW()
|
||||
{
|
||||
return AuTestBit(isAMD && f_81_EDX, 31);
|
||||
}
|
||||
|
||||
AUKN_SYM const CpuInfo &GetCPUInfo()
|
||||
{
|
||||
return gCpuInfo;
|
||||
}
|
||||
|
||||
static void SetCpuId()
|
||||
{
|
||||
// Credit: https://docs.microsoft.com/en-us/cpp/intrinsics/cpuid-cpuidex?view=msvc-160
|
||||
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||
std::vector<CPUIdContext> data;
|
||||
std::vector<CPUIdContext> extdata;
|
||||
|
||||
auto cpuInfo = cpuid(0);
|
||||
auto nIds = cpuInfo.eax;
|
||||
|
||||
for (int i = 0; i <= nIds; ++i)
|
||||
{
|
||||
data.push_back(cpuid(i));
|
||||
}
|
||||
|
||||
char vendor[0x20];
|
||||
memset(vendor, 0, sizeof(vendor));
|
||||
*reinterpret_cast<int*>(vendor) = cpuInfo.ebx;
|
||||
*reinterpret_cast<int*>(vendor + 4) = cpuInfo.edx;
|
||||
*reinterpret_cast<int*>(vendor + 8) = cpuInfo.ecx;
|
||||
|
||||
gCpuInfo.cpuId.vendor = vendor;
|
||||
|
||||
if (gCpuInfo.cpuId.vendor == "GenuineIntel")
|
||||
{
|
||||
gCpuInfo.cpuId.isIntel = true;
|
||||
}
|
||||
else if (gCpuInfo.cpuId.vendor == "AuthenticAMD")
|
||||
{
|
||||
gCpuInfo.cpuId.isAMD = true;
|
||||
}
|
||||
|
||||
// load bitset with flags for function 0x00000001
|
||||
if (nIds >= 1)
|
||||
{
|
||||
gCpuInfo.cpuId.f_1_ECX = data[1].ecx;
|
||||
gCpuInfo.cpuId.f_1_EDX = data[1].edx;
|
||||
}
|
||||
|
||||
// load bitset with flags for function 0x00000007
|
||||
if (nIds >= 7)
|
||||
{
|
||||
gCpuInfo.cpuId.f_7_EBX = data[7].ebx;
|
||||
gCpuInfo.cpuId.f_7_ECX = data[7].ecx;
|
||||
}
|
||||
|
||||
// gets the number of the highest valid extended ID.
|
||||
auto cpui = cpuid(0x80000000);
|
||||
auto nExIds = cpui.eax;
|
||||
|
||||
char brand[0x40];
|
||||
memset(brand, 0, sizeof(brand));
|
||||
|
||||
for (int i = 0x80000000; i <= nExIds; ++i)
|
||||
{
|
||||
extdata.push_back(cpuid(i));
|
||||
}
|
||||
|
||||
// load bitset with flags for function 0x80000001
|
||||
if (nExIds >= 0x80000001)
|
||||
{
|
||||
gCpuInfo.cpuId.f_81_ECX = extdata[1].ecx;
|
||||
gCpuInfo.cpuId.f_81_EDX = extdata[1].edx;
|
||||
}
|
||||
|
||||
// Interpret CPU brand string if reported
|
||||
if (nExIds >= 0x80000004)
|
||||
{
|
||||
memcpy(brand, &extdata[2], sizeof(cpui));
|
||||
memcpy(brand + 16, &extdata[3], sizeof(cpui));
|
||||
memcpy(brand + 32, &extdata[4], sizeof(cpui));
|
||||
gCpuInfo.cpuId.brand = brand;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void SetCpuTopology()
|
||||
{
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
SYSTEM_LOGICAL_PROCESSOR_INFORMATION sysinfo[128];
|
||||
DWORD length = AuArraySize(sysinfo) * sizeof(*sysinfo);
|
||||
|
||||
if (!GetLogicalProcessorInformation(sysinfo, &length))
|
||||
{
|
||||
SYSTEM_INFO sysinfo;
|
||||
GetSystemInfo(&sysinfo);
|
||||
gCpuInfo.socket = 1;
|
||||
gCpuInfo.cores = 1;
|
||||
gCpuInfo.threads = sysinfo.dwNumberOfProcessors;
|
||||
return;
|
||||
}
|
||||
|
||||
length /= sizeof(*sysinfo);
|
||||
|
||||
gCpuInfo.socket = 0;
|
||||
gCpuInfo.cores = 0;
|
||||
gCpuInfo.threads = 0;
|
||||
|
||||
for (auto i = 0; i < length; i++)
|
||||
{
|
||||
if (sysinfo[i].Relationship == RelationProcessorCore)
|
||||
{
|
||||
gCpuInfo.cores++;
|
||||
auto mask = sysinfo[i].ProcessorMask;
|
||||
unsigned long offset, count;
|
||||
BitScanForward(&offset, mask);
|
||||
BitScanForward(&count, ~(mask >> offset));
|
||||
gCpuInfo.threads += count;
|
||||
}
|
||||
else if (sysinfo[i].Relationship == RelationProcessorPackage)
|
||||
{
|
||||
gCpuInfo.socket++;
|
||||
}
|
||||
}
|
||||
|
||||
#elif defined(AURORA_IS_BSD_DERIVED)
|
||||
|
||||
auto opt = QueryBsdHwStat(HW_AVAILCPU);
|
||||
if (opt.value_or(0) < 1)
|
||||
{
|
||||
opt = QueryBsdHwStat(HW_NCPU);
|
||||
}
|
||||
|
||||
gCpuInfo.socket = 1;
|
||||
gCpuInfo.cores = 1;
|
||||
gCpuInfo.threads = opt.value_or(1)
|
||||
|
||||
#elif defined(AURORA_IS_POSIX_DERIVED)
|
||||
gCpuInfo.socket = 1;
|
||||
gCpuInfo.cores = 1;
|
||||
gCpuInfo.threads = sysconf(_SC_NPROCESSORS_ONLN);
|
||||
#endif
|
||||
}
|
||||
|
||||
void InitCpuInfo()
|
||||
{
|
||||
gCpuInfo.cpuArch = Aurora::Build::kCurrentArchitecture;
|
||||
SetCpuId();
|
||||
SetCpuTopology();
|
||||
}
|
||||
}
|
@ -7,3 +7,7 @@
|
||||
***/
|
||||
#pragma once
|
||||
|
||||
namespace Aurora::HWInfo
|
||||
{
|
||||
void InitCpuInfo();
|
||||
}
|
42
Source/HWInfo/HWInfo.cpp
Normal file
42
Source/HWInfo/HWInfo.cpp
Normal file
@ -0,0 +1,42 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: HWInfo.hpp
|
||||
Date: 2021-6-19
|
||||
Author: Reece
|
||||
***/
|
||||
#include <RuntimeInternal.hpp>
|
||||
#include "HWInfo.hpp"
|
||||
#include "CpuInfo.hpp"
|
||||
#include "RamInfo.hpp"
|
||||
|
||||
#if defined(AURORA_IS_BSD_DERIVED)
|
||||
#include <sys/types.h>
|
||||
#include <sys/sysctl.h>
|
||||
#endif
|
||||
|
||||
namespace Aurora::HWInfo
|
||||
{
|
||||
AuOptional<AuUInt> QueryBsdHwStat(int id)
|
||||
{
|
||||
#if defined(AURORA_IS_BSD_DERIVED)
|
||||
int mib[4];
|
||||
AuUInt stat;
|
||||
size_t len = sizeof(stat);
|
||||
|
||||
mib[0] = CTL_HW;
|
||||
mib[1] = id;
|
||||
|
||||
auto ret = sysctl(mib, 2, &stat, &len, NULL, 0);
|
||||
return ret == 0 ? stat : {};
|
||||
#else
|
||||
return {};
|
||||
#endif
|
||||
}
|
||||
|
||||
void Init()
|
||||
{
|
||||
InitCpuInfo();
|
||||
InitRamInfo();
|
||||
}
|
||||
}
|
@ -5,3 +5,10 @@
|
||||
Date: 2021-6-19
|
||||
Author: Reece
|
||||
***/
|
||||
#pragma once
|
||||
|
||||
namespace Aurora::HWInfo
|
||||
{
|
||||
AuOptional<AuUInt> QueryBsdHwStat(int id);
|
||||
void Init();
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: RamInfo.Linux.cpp
|
||||
Date: 2021-6-12
|
||||
Author: Reece
|
||||
***/
|
@ -1,7 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: RamInfo.Linux.hpp
|
||||
Date: 2021-6-12
|
||||
Author: Reece
|
||||
***/
|
@ -1,12 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: RamInfo.Win32.cpp
|
||||
Date: 2021-6-12
|
||||
Author: Reece
|
||||
***/
|
||||
#include <RuntimeInternal.hpp>
|
||||
#include "HWInfo.hpp"
|
||||
#include "RamInfo.hpp"
|
||||
#include "RamInfo.Win32.hpp"
|
||||
|
@ -1,9 +0,0 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: RamInfo.Win32.hpp
|
||||
Date: 2021-6-12
|
||||
Author: Reece
|
||||
***/
|
||||
#pragma once
|
||||
|
127
Source/HWInfo/RamInfo.cpp
Normal file
127
Source/HWInfo/RamInfo.cpp
Normal file
@ -0,0 +1,127 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: RamInfo.cpp
|
||||
Date: 2021-6-12
|
||||
Author: Reece
|
||||
***/
|
||||
#include <RuntimeInternal.hpp>
|
||||
#include "HWInfo.hpp"
|
||||
#include "RamInfo.hpp"
|
||||
|
||||
|
||||
#if defined(AURORA_IS_BSD_DERIVED)
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/vmmeter.h>
|
||||
#include <sys/limits.h>
|
||||
#include <vm/vm_param.h>
|
||||
#endif
|
||||
|
||||
#if defined(AURORA_IS_LINUX_DERIVED)
|
||||
#include <sys/sysinfo.h>
|
||||
#endif
|
||||
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
#include <psapi.h>
|
||||
#endif
|
||||
|
||||
namespace Aurora::HWInfo
|
||||
{
|
||||
static AuOptional<RamStat> gMemStartup;
|
||||
static AuOptional<RamStat> gMemSystem;
|
||||
|
||||
AUKN_SYM AuOptional<RamStat> GetMemStatProcess()
|
||||
{
|
||||
auto max = GetMemStatSystem().value_or(RamStat {}).available;
|
||||
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
|
||||
PROCESS_MEMORY_COUNTERS pmc;
|
||||
|
||||
if (!GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(PROCESS_MEMORY_COUNTERS)))
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
return RamStat {pmc.WorkingSetSize, max};
|
||||
|
||||
#elif defined(AURORA_IS_POSIX_DERIVED)
|
||||
|
||||
struct rusage usage;
|
||||
|
||||
getrusage(RUSAGE_SELF, &usage);
|
||||
auto used = AuUInt64(usage.ru_maxrss) * 1024;
|
||||
return RamStat {used, max};
|
||||
|
||||
#else
|
||||
|
||||
return {};
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(AURORA_IS_BSD_DERIVED)
|
||||
struct vmtotal GetVMInfo()
|
||||
{
|
||||
struct vmtotal info;
|
||||
int mib[2];
|
||||
|
||||
mib[0] = CTL_VM;
|
||||
mib[1] = VM_TOTAL;
|
||||
|
||||
size_t len = sizeof(info);
|
||||
sysctl(mib, 2, &info, &len, NULL, 0);
|
||||
|
||||
return info;
|
||||
}
|
||||
#endif
|
||||
|
||||
AUKN_SYM AuOptional<RamStat> GetMemStatSystem()
|
||||
{
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
|
||||
MEMORYSTATUSEX statex;
|
||||
statex.dwLength = sizeof(statex);
|
||||
|
||||
if (!GlobalMemoryStatusEx(&statex))
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
return RamStat {statex.ullTotalPhys - statex.ullAvailPhys, statex.ullTotalPhys};
|
||||
|
||||
#elif defined(AURORA_IS_BSD_DERIVED)
|
||||
|
||||
auto maxMem = QueryBsdHwStat(HW_PHYSMEM);
|
||||
auto vmInfo = GetVMInfo();
|
||||
auto freeMem = AuUInt64(vmInfo.t_free) * QueryBsdHwStat(HW_PAGESIZE).value_or(4096);
|
||||
|
||||
return RamStat {maxMem.value_or(freeMem * 2) - freeMem, maxMem.value_or(0)};
|
||||
|
||||
#elif defined(AURORA_IS_LINUX_DERIVED)
|
||||
|
||||
struct sysinfo info;
|
||||
|
||||
if (sysinfo(&info) != 0)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
return RamStat {info.totalram - info.freeram, info.totalram}
|
||||
|
||||
#else
|
||||
return {};
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
AUKN_SYM AuOptional<RamStat> GetMemStatStartup()
|
||||
{
|
||||
return gMemStartup;
|
||||
}
|
||||
|
||||
void InitRamInfo()
|
||||
{
|
||||
gMemStartup = GetMemStatSystem();
|
||||
}
|
||||
}
|
@ -5,3 +5,9 @@
|
||||
Date: 2021-6-12
|
||||
Author: Reece
|
||||
***/
|
||||
#pragma once
|
||||
|
||||
namespace Aurora::HWInfo
|
||||
{
|
||||
void InitRamInfo();
|
||||
}
|
0
Source/IO/FS/Async.Linux.hpp
Normal file
0
Source/IO/FS/Async.Linux.hpp
Normal file
0
Source/IO/FS/Async.NT.cpp
Normal file
0
Source/IO/FS/Async.NT.cpp
Normal file
0
Source/IO/FS/Async.NT.hpp
Normal file
0
Source/IO/FS/Async.NT.hpp
Normal file
0
Source/IO/FS/Async.Unix.cpp
Normal file
0
Source/IO/FS/Async.Unix.cpp
Normal file
0
Source/IO/FS/Async.Unix.hpp
Normal file
0
Source/IO/FS/Async.Unix.hpp
Normal file
@ -13,7 +13,7 @@
|
||||
#if !defined(_AURUNTIME_GENERICFS)
|
||||
namespace Aurora::IO::FS
|
||||
{
|
||||
static const AuUInt64 kFileCopyBlock = 0x4000; // 16KiB
|
||||
static const AuUInt64 kFileCopyBlock = 0xFFFF; // 64KiB
|
||||
|
||||
bool _MkDir(const AuString &str)
|
||||
{
|
||||
@ -91,7 +91,7 @@ namespace Aurora::IO::FS
|
||||
status = true;
|
||||
|
||||
out:
|
||||
if (fileHandle != INVALID_HANDLE_VALUE) CloseHandle(fileHandle);
|
||||
AuWin32CloseHandle(fileHandle);
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -145,7 +145,7 @@ namespace Aurora::IO::FS
|
||||
status = true;
|
||||
|
||||
out:
|
||||
if (fileHandle != INVALID_HANDLE_VALUE) CloseHandle(fileHandle);
|
||||
AuWin32CloseHandle(fileHandle);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
namespace Aurora::IO::FS
|
||||
{
|
||||
static const AuUInt64 kFileCopyBlock = 0x4000; // 16KiB
|
||||
static const AuUInt64 kFileCopyBlock = 0xFFFF; // 64KiB, 1k iterations to max out 64MB/s disk, 2k iteration to make out 128MB/s disk, is this number still way too low? cpu go brr
|
||||
|
||||
WinFileStream::~WinFileStream()
|
||||
{
|
||||
@ -160,12 +160,7 @@ namespace Aurora::IO::FS
|
||||
|
||||
void WinFileStream::Close()
|
||||
{
|
||||
HANDLE handle;
|
||||
|
||||
if ((handle = std::exchange(handle_, INVALID_HANDLE_VALUE)) != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
CloseHandle(handle);
|
||||
}
|
||||
AuWin32CloseHandle(handle_);
|
||||
}
|
||||
|
||||
void WinFileStream::Flush()
|
||||
|
0
Source/Loop/Loop.cpp
Normal file
0
Source/Loop/Loop.cpp
Normal file
0
Source/Loop/Loop.hpp
Normal file
0
Source/Loop/Loop.hpp
Normal file
@ -105,8 +105,8 @@ namespace Aurora::Parse
|
||||
bool escapedQuote = false;
|
||||
|
||||
auto isTerminating = IsTerminating(state, terminatingChars);
|
||||
auto isSpace = ContainedHerein(whiteChars);
|
||||
auto isIgnore = ContainedHerein(illegalCharacters);
|
||||
static auto isSpace = ContainedHerein(whiteChars);
|
||||
static auto isIgnore = ContainedHerein(illegalCharacters);
|
||||
|
||||
while (true)
|
||||
{
|
||||
@ -251,7 +251,10 @@ namespace Aurora::Parse
|
||||
{
|
||||
auto c = *itr;
|
||||
|
||||
if ((c < '0') || (c > '9')) return false;
|
||||
if ((c < '0') || (c > '9'))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
auto old = res;
|
||||
|
||||
@ -374,11 +377,11 @@ namespace Aurora::Parse
|
||||
}
|
||||
case ParsableTag::kParseBoolean:
|
||||
{
|
||||
if (str == "0" || (stricmp(str.c_str(), "false") == 0) || (stricmp(str.c_str(), "no") == 0))
|
||||
if ((str == "0") || (stricmp(str.c_str(), "false") == 0) || (stricmp(str.c_str(), "no") == 0))
|
||||
{
|
||||
out.primitive.boolean = false;
|
||||
}
|
||||
else if (str == "1" || (stricmp(str.c_str(), "true") == 0) || (stricmp(str.c_str(), "yes") == 0))
|
||||
else if ((str == "1") || (stricmp(str.c_str(), "true") == 0) || (stricmp(str.c_str(), "yes") == 0))
|
||||
{
|
||||
out.primitive.boolean = true;
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: Paths.cpp
|
||||
Date: 2021-6-12
|
||||
Date: 2021-7-14
|
||||
Author: Reece
|
||||
***/
|
||||
#include <RuntimeInternal.hpp>
|
||||
|
@ -1,3 +1,10 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: Process.cpp
|
||||
Date: 2021-8-20
|
||||
Author: Reece
|
||||
***/
|
||||
#include <RuntimeInternal.hpp>
|
||||
#include "Process.hpp"
|
||||
#if defined(AURORA_IS_POSIX_DERIVED)
|
||||
|
@ -1,3 +1,10 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: Process.hpp
|
||||
Date: 2021-8-20
|
||||
Author: Reece
|
||||
***/
|
||||
#pragma once
|
||||
|
||||
namespace Aurora::Process
|
||||
|
@ -1,3 +1,10 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: RandomDevice.cpp
|
||||
Date: 2021-9-3
|
||||
Author: Reece
|
||||
***/
|
||||
#include <AuroraRuntime.hpp>
|
||||
#include "RNG/WELL.hpp"
|
||||
#include "RandomDevice.hpp"
|
||||
|
@ -1,3 +1,10 @@
|
||||
/***
|
||||
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||
|
||||
File: RandomDevice.hpp
|
||||
Date: 2021-9-3
|
||||
Author: Reece
|
||||
***/
|
||||
#pragma once
|
||||
|
||||
namespace Aurora::RNG
|
||||
|
@ -496,7 +496,7 @@ namespace Aurora::Threading::Threads
|
||||
return;
|
||||
}
|
||||
|
||||
if (prio == ThreadPrio::kPrioAboveHigh)
|
||||
if (prio == EThreadPrio::ePrioRT)
|
||||
{
|
||||
sched_param param {};
|
||||
param.sched_priority = sched_get_priority_min(SCHED_RR);
|
||||
|
Loading…
Reference in New Issue
Block a user