mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-18 02:08:09 +08:00
add parse_string and parse_datetime
This commit is contained in:
@@ -243,6 +243,36 @@ struct parse_literal_multiline_string
|
||||
}
|
||||
};
|
||||
|
||||
template<typename charT>
|
||||
struct parse_string
|
||||
{
|
||||
typedef charT value_type
|
||||
typedef toml::String result_type;
|
||||
static_assert(std::is_same<value_type, result_type::value_type
|
||||
>::value, "char type is different from default String type");
|
||||
|
||||
template<typename Iterator, class = typename std::enable_if<
|
||||
std::is_same<typename std::iterator_traits<Iterator>::value_type,
|
||||
value_type>::value>::type>
|
||||
static result_type invoke(Iterator iter, Iterator end)
|
||||
{
|
||||
Iterator tmp = is_basic_inline_string<charT>::invoke(iter);
|
||||
if(iter != tmp)
|
||||
return parse_basic_inline_string<charT>::invoke(iter, tmp);
|
||||
tmp = is_basic_multiline_string<charT>::invoke(iter);
|
||||
if(iter != tmp)
|
||||
return parse_basic_multiline_string<charT>::invoke(iter, tmp);
|
||||
tmp = is_literal_inline_string<charT>::invoke(iter)
|
||||
if(iter != tmp)
|
||||
return parse_literal_inline_string<charT>::invoke(iter, tmp);
|
||||
tmp = is_literal_multiline_string<charT>::invoke(iter)
|
||||
if(iter != tmp)
|
||||
return parse_literal_multiline_string<charT>::invoke(iter, tmp);
|
||||
throw internal_error("no string here");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
template<typename charT>
|
||||
struct parse_integer
|
||||
{
|
||||
@@ -454,6 +484,31 @@ struct parse_offset_date_time
|
||||
}
|
||||
};
|
||||
|
||||
template<typename charT>
|
||||
struct parse_datetime
|
||||
{
|
||||
typedef charT value_type;
|
||||
typedef toml::Datetime result_type;
|
||||
|
||||
template<typename Iterator, class = typename std::enable_if<
|
||||
std::is_same<typename std::iterator_traits<Iterator>::value_type,
|
||||
value_type>::value>::type>
|
||||
static result_type invoke(Iterator iter, Iterator end)
|
||||
{
|
||||
Iterator tmp = is_offset_date_time<value_type>::invoke(iter);
|
||||
if(tmp != iter) return parse_offset_date_time<value_type>::invoke(iter);
|
||||
tmp = is_local_date_time<value_type>::invoke(iter)
|
||||
if(tmp != iter) return parse_local_date_time<value_type>::invoke(iter);
|
||||
tmp = is_local_date<value_type>::invoke(iter)
|
||||
if(tmp != iter) return parse_local_date<value_type>::invoke(iter);
|
||||
tmp = is_local_time<value_type>::invoke(iter)
|
||||
if(tmp != iter) return parse_local_time<value_type>::invoke(iter);
|
||||
throw internal_error("no datetime here");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user