| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| #include "vm/zone_text_buffer.h" |
| |
| #include "platform/assert.h" |
| #include "platform/globals.h" |
| #include "platform/utils.h" |
| #include "vm/object.h" |
| #include "vm/os.h" |
| #include "vm/zone.h" |
| |
| namespace dart { |
| |
| ZoneTextBuffer::ZoneTextBuffer(Zone* zone, intptr_t initial_capacity) |
| : zone_(zone) { |
| ASSERT(initial_capacity > 0); |
| buffer_ = reinterpret_cast<char*>(zone->Alloc<char>(initial_capacity)); |
| capacity_ = initial_capacity; |
| buffer_[length_] = '\0'; |
| } |
| |
| void ZoneTextBuffer::Clear() { |
| const intptr_t initial_capacity = 64; |
| buffer_ = reinterpret_cast<char*>(zone_->Alloc<char>(initial_capacity)); |
| capacity_ = initial_capacity; |
| length_ = 0; |
| buffer_[length_] = '\0'; |
| } |
| |
| bool ZoneTextBuffer::EnsureCapacity(intptr_t len) { |
| intptr_t remaining = capacity_ - length_; |
| if (remaining <= len) { |
| intptr_t new_capacity = capacity_ + Utils::Maximum(capacity_, len); |
| buffer_ = zone_->Realloc<char>(buffer_, capacity_, new_capacity); |
| capacity_ = new_capacity; |
| } |
| return true; |
| } |
| |
| } // namespace dart |