#include "embedded_data.h" #include namespace node { std::string ToOctalString(const uint8_t ch) { // We can print most printable characters directly. The exceptions are '\' // (escape characters), " (would end the string), and ? (trigraphs). The // latter may be overly conservative: we compile with C++17 which doesn't // support trigraphs. if (ch >= ' ' && ch <= '~' && ch != '\\' && ch != '"' && ch != '?') { return std::string(1, static_cast(ch)); } // All other characters are blindly output as octal. const char c0 = '0' + ((ch >> 6) & 7); const char c1 = '0' + ((ch >> 3) & 7); const char c2 = '0' + (ch & 7); return std::string("\\") + c0 + c1 + c2; } std::vector GetOctalTable() { size_t size = 1 << 8; std::vector code_table(size); for (size_t i = 0; i < size; ++i) { code_table[i] = ToOctalString(static_cast(i)); } return code_table; } const std::string& GetOctalCode(uint8_t index) { static std::vector table = GetOctalTable(); return table[index]; } } // namespace node