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>
|
template<typename charT>
|
||||||
struct parse_integer
|
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