diff --git a/g13d/CMakeLists.txt b/g13d/CMakeLists.txt index d67475f..0b98cf5 100644 --- a/g13d/CMakeLists.txt +++ b/g13d/CMakeLists.txt @@ -19,6 +19,7 @@ add_executable(g13d main.cc stick.cc manager.cc + repr.cc ) target_compile_definitions(g13d PRIVATE BOOST_LOG_DYN_LINK=1) diff --git a/g13d/repr.cc b/g13d/repr.cc new file mode 100644 index 0000000..7ce0c1b --- /dev/null +++ b/g13d/repr.cc @@ -0,0 +1,55 @@ +#include + +#include "repr.h" + +namespace G13 { + +void string_repr_out::write_on(std::ostream &o) const { + const char *cp = s.c_str(); + const char *end = cp + s.size(); + + o << "\""; + + while (cp < end) { + switch (*cp) { + case '\n': + o << "\\n"; + break; + + case '\r': + o << "\\r"; + break; + + case '\0': + o << "\\0"; + break; + + case '\t': + o << "\\t"; + break; + + case '\\': + case '\'': + case '\"': + o << "\\" << *cp; + break; + + default: { + char c = *cp; + if (c < 32) { + char hi = '0' + (c & 0x0f); + char lo = '0' + ((c >> 4) & 0x0f); + o << "\\x" << hi << lo; + } else { + o << c; + } + } + } + + cp++; + } + + o << "\""; +}; + +} // namespace G13 diff --git a/g13d/repr.h b/g13d/repr.h index dc9c383..b184ac9 100644 --- a/g13d/repr.h +++ b/g13d/repr.h @@ -6,54 +6,6 @@ namespace G13 { -void string_repr_out::write_on(std::ostream &o) const { - const char *cp = s.c_str(); - const char *end = cp + s.size(); - - o << "\""; - - while (cp < end) { - switch (*cp) { - case '\n': - o << "\\n"; - break; - - case '\r': - o << "\\r"; - break; - - case '\0': - o << "\\0"; - break; - - case '\t': - o << "\\t"; - break; - - case '\\': - case '\'': - case '\"': - o << "\\" << *cp; - break; - - default: { - char c = *cp; - if (c < 32) { - char hi = '0' + (c & 0x0f); - char lo = '0' + ((c >> 4) & 0x0f); - o << "\\x" << hi << lo; - } else { - o << c; - } - } - } - - cp++; - } - - o << "\""; -}; - struct string_repr_out { string_repr_out(const std::string &str) : s(str) {} void write_on(std::ostream &) const;