#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static inline QString trMain(char const *sourceText, char const *disambiguation = nullptr, int n = -1) { return QCoreApplication::translate("main", sourceText, disambiguation, n); } static inline quint8 readByte(std::istream &st) { char b; st.read(&b, 1); return quint8(b); } template static inline T readLE(std::istream &st) { std::array b; st.read(b.data(), b.size()); return qFromLittleEndian(b.data()); } template static inline T readBE(std::istream &st) { std::array b; st.read(b.data(), b.size()); return qFromBigEndian(b.data()); } template static inline std::array readBytes(std::istream &st) { std::array b; st.read(b.data(), b.size()); return std::move(b); } static inline QDebug operator<<(QDebug debug, std::string const &t) { debug << QString::fromStdString(t); return debug; } template static inline QDebug operator<<(QDebug debug, std::unique_ptr const &t) { debug << *t; return debug; } template static inline QDebug operator<<(QDebug debug, std::variant const &t) { std::visit([&](auto &&arg) {debug << arg;}, t); return debug; } static inline std::ifstream openReadBin(std::filesystem::path path) { return std::ifstream{path, std::ios_base::in | std::ios_base::binary}; } template static inline std::string ntbsToString(std::array const &ntbs) { std::string str; auto zero = std::find(ntbs.cbegin(), ntbs.cend(), '\0'); std::copy(ntbs.cbegin(), zero, std::back_inserter(str)); return str; } // EOF