| 5671 | } |
| 5672 | |
| 5673 | bool end_object() |
| 5674 | { |
| 5675 | if (ref_stack.back() && !callback(static_cast<int>(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) |
| 5676 | { |
| 5677 | // discard object |
| 5678 | *ref_stack.back() = discarded; |
| 5679 | } |
| 5680 | |
| 5681 | JSON_ASSERT(!ref_stack.empty()); |
| 5682 | JSON_ASSERT(!keep_stack.empty()); |
| 5683 | ref_stack.pop_back(); |
| 5684 | keep_stack.pop_back(); |
| 5685 | |
| 5686 | if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) |
| 5687 | { |
| 5688 | // remove discarded value |
| 5689 | for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) |
| 5690 | { |
| 5691 | if (it->is_discarded()) |
| 5692 | { |
| 5693 | ref_stack.back()->erase(it); |
| 5694 | break; |
| 5695 | } |
| 5696 | } |
| 5697 | } |
| 5698 | |
| 5699 | return true; |
| 5700 | } |
| 5701 | |
| 5702 | bool start_array(std::size_t len) |
| 5703 | { |