forked from LeenkxTeam/Kmake
34 lines
1.1 KiB
C++
34 lines
1.1 KiB
C++
#include "embedded_data.h"
|
|
#include <vector>
|
|
|
|
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<char>(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<std::string> GetOctalTable() {
|
|
size_t size = 1 << 8;
|
|
std::vector<std::string> code_table(size);
|
|
for (size_t i = 0; i < size; ++i) {
|
|
code_table[i] = ToOctalString(static_cast<uint8_t>(i));
|
|
}
|
|
return code_table;
|
|
}
|
|
|
|
const std::string& GetOctalCode(uint8_t index) {
|
|
static std::vector<std::string> table = GetOctalTable();
|
|
return table[index];
|
|
}
|
|
} // namespace node
|