From 368a3b78a26e2ae7b2174454c8c0fc45742e6d7d Mon Sep 17 00:00:00 2001 From: ELynx Date: Mon, 27 Jun 2016 13:46:37 +0300 Subject: [PATCH] create holder class --- .../chaiscript/language/chaiscript_parser.hpp | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/include/chaiscript/language/chaiscript_parser.hpp b/include/chaiscript/language/chaiscript_parser.hpp index f67bbf7..c866c1e 100644 --- a/include/chaiscript/language/chaiscript_parser.hpp +++ b/include/chaiscript/language/chaiscript_parser.hpp @@ -58,26 +58,32 @@ namespace chaiscript // Generic for u16, u32 and (probably) wchar template - string_type str_from_ll(long long val) + struct Char_Parser_Helper { - return string_type(1, string_type::value_type(val)); //size, character - } + static string_type str_from_ll(long long val) + { + return string_type(1, string_type::value_type(val)); //size, character + } + }; // Specialization for char template<> - std::string str_from_ll(long long val) + struct Char_Parser_Helper { - std::string::value_type c[2]; - c[1] = std::string::value_type(val); - c[0] = std::string::value_type(val >> 8); - - if (c[0] == 0) + static std::string str_from_ll(long long val) { - return std::string(1, c[1]); //size, character - } + std::string::value_type c[2]; + c[1] = std::string::value_type(val); + c[0] = std::string::value_type(val >> 8); - return std::string(c, 2); //char buffer, size - } + if (c[0] == 0) + { + return std::string(1, c[1]); //size, character + } + + return std::string(c, 2); //char buffer, size + } + }; } class ChaiScript_Parser { @@ -1019,7 +1025,7 @@ namespace chaiscript { auto val = stoll(hex_matches, 0, 16); hex_matches.clear(); - match += detail::str_from_ll(val); + match += detail::Char_Parser_Helper::str_from_ll(val); is_escaped = false; is_unicode = false; }