some range loop conversions

Signed-off-by: Rosen Penev <rosenp@gmail.com>
main
Rosen Penev 4 years ago committed by Luis Díaz Más
parent 743da1a564
commit 4d2bc3c752

@ -27,10 +27,11 @@ THE SOFTWARE.
#include "Jzon.h" #include "Jzon.h"
#include <sstream> #include <algorithm>
#include <array>
#include <fstream> #include <fstream>
#include <sstream>
#include <stack> #include <stack>
#include <algorithm>
namespace Jzon namespace Jzon
{ {
@ -357,27 +358,31 @@ namespace Jzon
} }
// This is not the most beautiful place for these, but it'll do // This is not the most beautiful place for these, but it'll do
static const char charsUnescaped[] = {'\\', '/', '\"', '\n', '\t', '\b', '\f', '\r'}; using chrPair = struct
static const char *charsEscaped[] = {"\\\\", "\\/", "\\\"", "\\n", "\\t", "\\b", "\\f", "\\r"};
static const unsigned int numEscapeChars = 8;
static const char nullUnescaped = '\0';
static const char *nullEscaped = "\0\0";
const char *&getEscaped(const char &c)
{ {
for (unsigned int i = 0; i < numEscapeChars; ++i) { char first;
if (c == charsUnescaped[i]) { const char *second;
return charsEscaped[i]; };
static constexpr std::array<chrPair, 8> chars{
chrPair{'\\', "\\\\"}, chrPair{'/', "\\/"}, chrPair{'\"', "\\\""}, chrPair{'\n', "\\n"},
chrPair{'\t', "\\t"}, chrPair{'\b', "\\b"}, chrPair{'\f', "\\f"}, chrPair{'\r', "\\r"},
};
static constexpr char nullUnescaped = '\0';
static constexpr const char *nullEscaped = "\0\0";
const char *const &getEscaped(const char &c)
{
for (auto &&chr : chars) {
if (chr.first == c) {
return chr.second;
} }
} }
return nullEscaped; return nullEscaped;
} }
const char &getUnescaped(const char &c1, const char &c2) const char &getUnescaped(const char &c1, const char &c2)
{ {
for (unsigned int i = 0; i < numEscapeChars; ++i) { for (auto &&chr : chars) {
const char *&e = charsEscaped[i]; if (c1 == chars[0].first && c2 == chars[1].first) {
return chr.first;
if (c1 == e[0] && c2 == e[1]) {
return charsUnescaped[i];
} }
} }
return nullUnescaped; return nullUnescaped;
@ -388,7 +393,7 @@ namespace Jzon
std::string escaped; std::string escaped;
for (auto &&c : value) { for (auto &&c : value) {
const char *&a = getEscaped(c); auto &&a = getEscaped(c);
if (a[0] != '\0') { if (a[0] != '\0') {
escaped += a[0]; escaped += a[0];
escaped += a[1]; escaped += a[1];

Loading…
Cancel
Save