| 5603 | } |
| 5604 | |
| 5605 | bool end_object() |
| 5606 | { |
| 5607 | if (ref_stack.back() && !callback(static_cast<int>(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) |
| 5608 | { |
| 5609 | // discard object |
| 5610 | *ref_stack.back() = discarded; |
| 5611 | } |
| 5612 | |
| 5613 | JSON_ASSERT(!ref_stack.empty()); |
| 5614 | JSON_ASSERT(!keep_stack.empty()); |
| 5615 | ref_stack.pop_back(); |
| 5616 | keep_stack.pop_back(); |
| 5617 | |
| 5618 | if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) |
| 5619 | { |
| 5620 | // remove discarded value |
| 5621 | for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) |
| 5622 | { |
| 5623 | if (it->is_discarded()) |
| 5624 | { |
| 5625 | ref_stack.back()->erase(it); |
| 5626 | break; |
| 5627 | } |
| 5628 | } |
| 5629 | } |
| 5630 | |
| 5631 | return true; |
| 5632 | } |
| 5633 | |
| 5634 | bool start_array(std::size_t len) |
| 5635 | { |