1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
// Copyright 2013-2025 Daniel Parker
// Distributed under the Boost license, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See https://github.com/danielaparker/jsoncons for latest version
#ifndef JSONCONS_EXT_JSONPATH_JSONPATH_UTILITIES_HPP
#define JSONCONS_EXT_JSONPATH_JSONPATH_UTILITIES_HPP
#include <cstddef>
namespace jsoncons { namespace jsonpath {
template <typename CharT,typename Sink>
std::size_t escape_string(const CharT* s, std::size_t length, Sink& sink)
{
std::size_t count = 0;
const CharT* begin = s;
const CharT* end = s + length;
for (const CharT* it = begin; it != end; ++it)
{
CharT c = *it;
switch (c)
{
case '\\':
sink.push_back('\\');
sink.push_back('\\');
count += 2;
break;
case '\'':
sink.push_back('\\');
sink.push_back('\'');
count += 2;
break;
case '\b':
sink.push_back('\\');
sink.push_back('b');
count += 2;
break;
case '\f':
sink.push_back('\\');
sink.push_back('f');
count += 2;
break;
case '\n':
sink.push_back('\\');
sink.push_back('n');
count += 2;
break;
case '\r':
sink.push_back('\\');
sink.push_back('r');
count += 2;
break;
case '\t':
sink.push_back('\\');
sink.push_back('t');
count += 2;
break;
default:
sink.push_back(c);
++count;
break;
}
}
return count;
}
} // namespace jsonpath
} // namespace jsoncons
#endif // JSONCONS_EXT_JSONPATH_JSONPATH_UTILITIES_HPP
|