// 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(zone->Alloc(initial_capacity)); capacity_ = initial_capacity; buffer_[length_] = '\0'; } void ZoneTextBuffer::Clear() { const intptr_t initial_capacity = 64; buffer_ = reinterpret_cast(zone_->Alloc(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(buffer_, capacity_, new_capacity); capacity_ = new_capacity; } return true; } } // namespace dart