| 804 | } |
| 805 | |
| 806 | ValueIterator eraseImpl(ValueIterator start, ValueIterator end) { |
| 807 | sonic_assert(this->IsArray()); |
| 808 | sonic_assert(start <= end); |
| 809 | sonic_assert(start >= this->Begin()); |
| 810 | sonic_assert(end <= this->End()); |
| 811 | |
| 812 | ValueIterator pos = this->Begin() + (start - this->Begin()); |
| 813 | for (ValueIterator it = pos; it != end; ++it) it->~DNode(); |
| 814 | std::memmove(static_cast<void*>(pos), end, |
| 815 | (this->End() - end) * sizeof(DNode)); |
| 816 | this->subLength(end - start); |
| 817 | return start; |
| 818 | } |
| 819 | |
| 820 | template <unsigned serializeFlags = kSerializeDefault> |
| 821 | SonicError serializeImpl(WriteBuffer& wb) const { |