#pragma once #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); } 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); } template static inline std::string escapeText(It begin, It end) { std::stringstream out; out << std::hex << std::uppercase; for(auto it = begin; it != end; ++it) { unsigned char c = *it; switch(c) { case '"': out << "\\\""; break; case '\0': out << "\\0"; break; case '\\': out << "\\\\"; break; case '\a': out << "\\a"; break; case '\b': out << "\\b"; break; case '\f': out << "\\f"; break; case '\n': out << "\\n"; break; case '\r': out << "\\r"; break; case '\t': out << "\\t"; break; case '\v': out << "\\v"; break; default: if(c >= ' ' && c <= '~') { out << c; } else { out << "\\x" << int(c); } break; } } return out.str(); } // EOF