Add 'external/ircolib/' from commit 'ce3cd726c8df8388d554abf8bb55d55020eb4450'

git-subtree-dir: external/ircolib
git-subtree-mainline: e64eb40b38
git-subtree-split: ce3cd726c8
This commit is contained in:
2026-03-23 12:16:56 +01:00
5 changed files with 315 additions and 0 deletions

43
external/ircolib/file.hpp vendored Normal file
View File

@@ -0,0 +1,43 @@
#pragma once
#include <types.hpp>
#include <fstream>
#include <vector>
#include <filesystem>
namespace fs = std::filesystem;
namespace ircolib {
static inline std::vector<u8> ReadFileBinary(const std::string &path) {
std::ifstream file(path, std::ios::binary);
return {std::istreambuf_iterator{file}, {}};
}
static inline void WriteFileBinary(const std::vector<u8> &data, const std::string &path) {
std::ofstream file(path, std::ios::binary);
std::copy(data.begin(), data.end(), std::ostreambuf_iterator{file});
}
static inline void WriteFileBinary(const u8 *data, const size_t size, const std::string &path) {
FILE *out = fopen(path.c_str(), "wb");
fwrite(data, size, 1, out);
fclose(out);
}
template <size_t Size>
static inline void WriteFileBinary(const std::array<u8, Size> &data, const std::string &path) {
std::ofstream file(path, std::ios::binary);
std::copy(data.begin(), data.end(), std::ostreambuf_iterator{file});
}
static inline size_t NextPow2(size_t num) {
// Taken from "Bit Twiddling Hacks" by Sean Anderson:
// https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
--num;
num |= num >> 1;
num |= num >> 2;
num |= num >> 4;
num |= num >> 8;
num |= num >> 16;
return num + 1;
}
} // namespace Util