| 835 | } |
| 836 | |
| 837 | template <typename Context, typename Iter> inline bool _parse_object(Context &ctx, input<Iter> &in) { |
| 838 | if (!ctx.parse_object_start()) { |
| 839 | return false; |
| 840 | } |
| 841 | if (in.expect('}')) { |
| 842 | return ctx.parse_object_stop(); |
| 843 | } |
| 844 | do { |
| 845 | std::string key; |
| 846 | if (!in.expect('"') || !_parse_string(key, in) || !in.expect(':')) { |
| 847 | return false; |
| 848 | } |
| 849 | if (!ctx.parse_object_item(in, key)) { |
| 850 | return false; |
| 851 | } |
| 852 | } while (in.expect(',')); |
| 853 | return in.expect('}') && ctx.parse_object_stop(); |
| 854 | } |
| 855 | |
| 856 | template <typename Iter> inline std::string _parse_number(input<Iter> &in) { |
| 857 | std::string num_str; |
no test coverage detected