// Copyright (c) 2012, 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.

#ifndef PLATFORM_TEXT_BUFFER_H_
#define PLATFORM_TEXT_BUFFER_H_

#include "vm/allocation.h"
#include "vm/globals.h"

namespace dart {


// TextBuffer maintains a dynamic character buffer with a printf-style way to
// append text.
class TextBuffer : ValueObject {
 public:
  explicit TextBuffer(intptr_t buf_size);
  ~TextBuffer();

  intptr_t Printf(const char* format, ...) PRINTF_ATTRIBUTE(2, 3);
  void AddChar(char ch);
  void EscapeAndAddCodeUnit(uint32_t cu);
  void AddString(const char* s);
  void AddEscapedString(const char* s);

  void Clear();

  char* buf() { return buf_; }
  intptr_t length() { return msg_len_; }

  // Steal ownership of the buffer pointer.
  // NOTE: TextBuffer is empty afterwards.
  const char* Steal();

 private:
  void EnsureCapacity(intptr_t len);
  char* buf_;
  intptr_t buf_size_;
  intptr_t msg_len_;
};

}  // namespace dart

#endif  // PLATFORM_TEXT_BUFFER_H_
