| 136 | } |
| 137 | |
| 138 | JSONCONS_VISITOR_RETURN_TYPE visit_end_object(const ser_context&, std::error_code&) override |
| 139 | { |
| 140 | JSONCONS_ASSERT(structure_stack_.size() > 0); |
| 141 | JSONCONS_ASSERT(structure_stack_.back().type_ == structure_type::object_t); |
| 142 | const size_t structure_index = structure_stack_.back().container_index_; |
| 143 | JSONCONS_ASSERT(item_stack_.size() > structure_index); |
| 144 | const size_t count = item_stack_.size() - (structure_index + 1); |
| 145 | auto first = item_stack_.begin() + (structure_index+1); |
| 146 | |
| 147 | if (count > 0) |
| 148 | { |
| 149 | item_stack_[structure_index].value.template cast<typename Json::object_storage>().value().uninitialized_init( |
| 150 | &item_stack_[structure_index+1], count); |
| 151 | } |
| 152 | |
| 153 | item_stack_.erase(first, item_stack_.end()); |
| 154 | structure_stack_.pop_back(); |
| 155 | if (structure_stack_.back().type_ == structure_type::root_t) |
| 156 | { |
| 157 | result_.swap(item_stack_.front().value); |
| 158 | item_stack_.pop_back(); |
| 159 | is_valid_ = true; |
| 160 | JSONCONS_VISITOR_RETURN; |
| 161 | } |
| 162 | JSONCONS_VISITOR_RETURN; |
| 163 | } |
| 164 | |
| 165 | JSONCONS_VISITOR_RETURN_TYPE visit_begin_array(semantic_tag tag, const ser_context&, std::error_code&) override |
| 166 | { |