From eb9f4dce1e14e3b8779395eb1d02225819593501 Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Sat, 13 May 2017 15:00:02 +0900 Subject: [PATCH] remove static and indent --- toml/format.hpp | 58 ++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/toml/format.hpp b/toml/format.hpp index 970be79..b3ab6ce 100644 --- a/toml/format.hpp +++ b/toml/format.hpp @@ -5,6 +5,7 @@ #include #include #include +#include namespace toml { @@ -79,12 +80,9 @@ template<> struct format_impl typedef detail::toml_default_type::type type; std::size_t max_length; - std::size_t indent_length; - format_impl() : max_length(80), indent_length(0){} - format_impl(std::size_t mx) : max_length(mx), indent_length(0){} - format_impl(std::size_t mx, std::size_t idt) - : max_length(mx), indent_length(std::min(mx, idt)){} + format_impl() : max_length(80){} + format_impl(std::size_t mx) : max_length(mx){} std::basic_string operator()(const type& val) @@ -117,8 +115,10 @@ template<> struct format_impl { str += 'u'; std::basic_ostringstream oss; - oss << std::setw(4) << std::fill(0) << std::hex + oss << std::setw(4) << std::setfill('0') << std::hex << static_cast(c); + auto hexdig = oss.str(); + std::transform(hexdig.begin(), hexdig.end(), std::toupper); str += oss.str(); break; } @@ -145,28 +145,27 @@ template<> struct format_impl convert_multiline(std::basic_string&& val) { std::basic_string str; str.reserve(val.size() + 6); - std::basic_string indent(' ', indent_length); - str += "\"\"\"\n" + indent; - std::size_t current = indent_length; + str += "\"\"\"\n"; + std::size_t current = 0; for(auto iter = val.begin()+1; iter != val.end()-1; ++iter) { if(*iter != '\\') { - if(current + 1 == max_length){str += "\\\n"; str += indent;} + if(current + 1 == max_length) str += "\\\n"; str += *iter; continue; } assert(std::next(iter) < val.end()-1); if(*std::next(iter) == 'u') { - if(current + 5 == max_length){str += "\\\n"; str += indent;} + if(current + 5 == max_length) str += "\\\n"; assert(iter + 5 < val.end()-1); - str += *iter; ++iter; // u - str += *iter; ++iter; // 0 - str += *iter; ++iter; // 0 - str += *iter; ++iter; // 0 - str += *iter; continue;// 0 + str += *iter; ++iter; // u + str += *iter; ++iter; // 0 + str += *iter; ++iter; // 1 + str += *iter; ++iter; // 2 + str += *iter; continue;// 3 } - if(current + 2 == max_length){str += "\\\n"; str += indent;} + if(current + 2 == max_length) str += "\\\n"; str += *iter; ++iter; str += *iter; } str += "\"\"\""; @@ -194,7 +193,6 @@ template<> struct format_impl typedef detail::toml_default_type::type type; std::size_t max_length; - std::size_t indent_length; std::basic_string operator()(const type& val) @@ -203,7 +201,7 @@ template<> struct format_impl retval += '['; for(const auto&& item : val) { - auto tmp = format(val, max_length, indent_length); + auto tmp = format(val, max_length - 1); retval += tmp; retval += ", "; if(tmp.size() * 2 > max_length) retval += '\n'; @@ -218,8 +216,8 @@ template<> struct format_impl { typedef detail::toml_default_type::type type; - static std::basic_string - invoke(const type& val) + std::basic_string + operator()(const type& val) { std::basic_string retval; for(const auto&& item : val) @@ -239,15 +237,15 @@ format(const value& v) { switch(v.type()) { - case value_t::Boolean : return format_impl::invoke(v.template cast()); - case value_t::Integer : return format_impl::invoke(v.template cast()); - case value_t::Float : return format_impl::invoke(v.template cast()); - case value_t::String : return format_impl::invoke(v.template cast()); - case value_t::Datetime: return format_impl::invoke(v.template cast()); - case value_t::Array : return format_impl::invoke(v.template cast()); - case value_t::Table : return format_impl::invoke(v.template cast()); - case value_t::Empty : return format_impl::invoke(v.template cast()); - case value_t::Unknown : return format_impl::invoke(v.template cast()); + case value_t::Boolean : return format_impl{}(v.template cast()); + case value_t::Integer : return format_impl{}(v.template cast()); + case value_t::Float : return format_impl{}(v.template cast()); + case value_t::String : return format_impl{}(v.template cast()); + case value_t::Datetime: return format_impl{}(v.template cast()); + case value_t::Array : return format_impl{}(v.template cast()); + case value_t::Table : return format_impl{}(v.template cast()); + case value_t::Empty : return format_impl{}(v.template cast()); + case value_t::Unknown : return format_impl{}(v.template cast()); default throw std::logic_error("toml::format: unknown enum value"); } }