#ifndef TOML11_ACCEPTOR #define TOML11_ACCEPTOR #include #include namespace toml { template struct is_charactor { typedef charT value_type; constexpr static value_type target = c; template::value_type, value_type>::value>::type> constexpr static Iterator invoke(Iterator iter) { return *iter == c ? std::next(iter) : iter; } }; template struct is_none_of { typedef charT value_type; template::value_type, value_type>::value>::type> constexpr static Iterator invoke(Iterator iter) { return *iter == head ? iter : is_not_a::invoke(iter); } }; template struct is_none_of { typedef charT value_type; template::value_type, value_type>::value>::type> constexpr static Iterator invoke(Iterator iter) { return *iter == tail ? iter : std::next(iter); } }; template struct is_in_range { typedef charT value_type; constexpr static value_type upper = up; constexpr static value_type lower = lw; static_assert(lower <= upper, "lower <= upper"); template::value_type, value_type>::value>::type> constexpr static Iterator invoke(Iterator iter) { return (lower <= *iter && *iter <= upper) ? std::next(iter) : iter; } }; template struct is_one_of; template struct is_one_of { typedef typename headT::value_type value_type; static_assert( std::is_same::value_type>::value, "different value_type"); template::value_type, value_type>::value>::type> static Iterator invoke(Iterator iter) { const Iterator tmp = headT::invoke(iter); return (tmp != iter) ? tmp : is_one_of::invoke(iter); } }; template struct is_one_of { typedef typename tailT::value_type value_type; template::value_type, value_type>::value>::type> static Iterator invoke(Iterator iter) { const Iterator tmp = tailT::invoke(iter); return (tmp != iter) ? tmp : iter; } }; template struct is_chain_of; template struct is_chain_of { typedef typename headT::value_type value_type; static_assert( std::is_same::value_type>::value, "different value_type"); template::value_type, value_type>::value>::type> static Iterator invoke(Iterator iter) { const Iterator tmp = headT::invoke(iter); return (tmp != iter) ? is_chain_of::invoke(tmp) : iter; } }; template struct is_chain_of { typedef typename tailT::value_type value_type; template::value_type, value_type>::value>::type> static Iterator invoke(Iterator iter) { const Iterator tmp = tailT::invoke(iter); return (tmp != iter) ? tmp : iter; } }; template struct is_repeat_of { typedef typename condT::value_type value_type; template::value_type, value_type>::value>::type> static Iterator invoke(Iterator iter) { Iterator tmp = condT::invoke(iter); while(tmp != iter) { iter = tmp; tmp = condT::invoke(iter); } return iter; } }; using is_space = is_charactor; using is_tab = is_charactor; using is_number = is_in_range; using is_lowercase = is_in_range; using is_uppercase = is_in_range; using is_alphabet = is_one_of; using is_whitespace = is_one_of; using is_newline = is_one_of, is_chain_of, is_charactor>>; using is_barekey_component = is_one_of, is_charactor>; using is_barekey = is_repeat_of; }//toml #endif// TOML11_ACCEPTOR