Clingo
Loading...
Searching...
No Matches
string.hh
1#pragma once
2
3#include <cassert>
4#include <string_view>
5
6namespace CppClingo::Util {
7
8void quote(std::string_view in, auto out) {
9 for (auto c : in) {
10 switch (c) {
11 case '\n': {
12 *out++ = '\\';
13 *out++ = 'n';
14 break;
15 }
16 case '\t': {
17 *out++ = '\\';
18 *out++ = 't';
19 break;
20 }
21 case '\\': {
22 *out++ = '\\';
23 *out++ = '\\';
24 break;
25 }
26 case '"': {
27 *out++ = '\\';
28 *out++ = '"';
29 break;
30 }
31 default: {
32 *out++ = c;
33 break;
34 }
35 }
36 }
37}
38void unquote(std::string_view in, auto out) {
39 bool slash = false;
40 for (auto c : in) {
41 if (slash) {
42 switch (c) {
43 case 'n': {
44 *out++ = '\n';
45 break;
46 }
47 case 't': {
48 *out++ = '\t';
49 break;
50 }
51 case '\\': {
52 *out++ = '\\';
53 break;
54 }
55 case '"': {
56 *out++ = '"';
57 break;
58 }
59 default: {
60 assert(false);
61 break;
62 }
63 }
64 slash = false;
65 } else if (c == '\\') {
66 slash = true;
67 } else {
68 *out++ = c;
69 }
70 }
71}
72
73} // namespace CppClingo::Util