diff options
author | rtk0c <[email protected]> | 2023-10-19 22:50:07 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2023-10-19 22:50:07 -0700 |
commit | 2c92e07f337e42cf58970443f9de678f85a9b2a4 (patch) | |
tree | 075d5407e1e12a9d35cbee6e4c20ad34e0765c42 /source/10-common/Utils.cpp | |
parent | 615809c036f604bce4582cea8ad49c64693f4f45 (diff) |
The great renaming: switch to "module style"
Diffstat (limited to 'source/10-common/Utils.cpp')
-rw-r--r-- | source/10-common/Utils.cpp | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/source/10-common/Utils.cpp b/source/10-common/Utils.cpp deleted file mode 100644 index f0ff76d..0000000 --- a/source/10-common/Utils.cpp +++ /dev/null @@ -1,130 +0,0 @@ -#include "Utils.hpp" - -#include "Macros.hpp" -#include "ScopeGuard.hpp" - -#ifdef _WIN32 -# include <Windows.h> -#endif - -namespace fs = std::filesystem; - -#ifdef _WIN32 -# define BRUSSEL_MODE_STRING(string) L##string -#else -# define BRUSSEL_MODE_STRING(string) string -#endif - -#if _WIN32 -using FopenModeString = const wchar_t*; -#else -using FopenModeString = const char*; -#endif - -static FopenModeString GetModeString(Utils::IoMode mode, bool binary) { - using namespace Utils; - if (binary) { - switch (mode) { - case Read: return BRUSSEL_MODE_STRING("rb"); - case WriteTruncate: return BRUSSEL_MODE_STRING("wb"); - case WriteAppend: return BRUSSEL_MODE_STRING("ab"); - } - } else { - switch (mode) { - case Read: return BRUSSEL_MODE_STRING("r"); - case WriteTruncate: return BRUSSEL_MODE_STRING("w"); - case WriteAppend: return BRUSSEL_MODE_STRING("a"); - } - } - return nullptr; -} - -FILE* Utils::OpenCstdioFile(const fs::path& path, IoMode mode, bool binary) { -#ifdef _WIN32 - // fs::path::c_str() returns `const wchar_t*` under Windows, because NT uses UTF-16 natively - // NOTE: _wfopen() only affects the type of path parameter, otherwise the file stream created is identical to the one by fopen() - return _wfopen(path.c_str(), ::GetModeString(mode, binary)); -#else - return fopen(path.c_str(), ::GetModeString(mode, binary)); -#endif -} - -FILE* Utils::OpenCstdioFile(const char* path, IoMode mode, bool binary) { -#ifdef _WIN32 - // On Windows, fopen() accepts ANSI codepage encoded path, convert our UTF-8 string to UTF-16 to ensure that no matter what the locale is, the path continues to work - WCHAR platformPath[MAX_PATH]; - if (MultiByteToWideChar(CP_UTF8, 0, path, -1, platformPath, MAX_PATH) == 0) { - return nullptr; - } - return _wfopen(platformPath, ::GetModeString(mode, binary)); -#else - return fopen(path, ::GetModeString(mode, binary)); -#endif -} - -std::string Utils::ReadFileAsString(const fs::path& path) { - auto file = Utils::OpenCstdioFile(path, Utils::Read); - if (!file) throw std::runtime_error("Failed to open source file."); - DEFER { fclose(file); }; - - fseek(file, 0, SEEK_END); - auto fileSize = ftell(file); - rewind(file); - - std::string result(fileSize, '\0'); - fread(result.data(), fileSize, 1, file); - - return result; -} - -bool Utils::ReadCstdioLine(FILE* file, std::string& buffer) { - buffer.clear(); - while (true) { - int c = fgetc(file); - if (c == EOF) { - if (buffer.empty() || buffer.back() != '\n') { - buffer += '\n'; - } - return false; - } else if (c == '\n') { - buffer += '\n'; - return true; - } else { - buffer += c; - } - } -} - -bool Utils::ReadCstdioLine(FILE* file, char* buffer, size_t bufferSize, size_t* outLineLength) { - // TODO - assert(false && "Unimplemented"); -} - -bool Utils::InRangeInclusive(int n, int lower, int upper) { - if (lower > upper) { - std::swap(lower, upper); - } - return n >= lower && n <= upper; -} - -bool Utils::LineContains(glm::ivec2 p1, glm::ivec2 p2, glm::ivec2 candidate) { - bool verticalLine = p1.x == p2.x && InRangeInclusive(candidate.x, p1.x, p2.x); - bool horizontalLine = p1.y == p2.y && InRangeInclusive(candidate.y, p1.y, p2.y); - return verticalLine && horizontalLine; -} - -bool Utils::IsColinear(glm::ivec2 p1, glm::ivec2 p2) { - return p1.x == p2.x || p1.y == p2.y; -} - -std::string Utils::MakeRandomNumberedName(const char* tag) { - int n = std::rand(); -#define RNG_NAME_PATTERN "Unnamed %s #%d", tag, n - // NOTE: does not include null-terminator - int size = snprintf(nullptr, 0, RNG_NAME_PATTERN); - std::string result; - result.resize(size); // std::string::resize handles storage for null-terminator alreaedy - snprintf(result.data(), size, RNG_NAME_PATTERN); -#undef RNG_NAME_PATTERN - return result; -} |