#ifndef QUICHE_SPDY_CORE_HTTP2_HEADER_STORAGE_H_
#define QUICHE_SPDY_CORE_HTTP2_HEADER_STORAGE_H_

#include "absl/strings/string_view.h"
#include "quiche/common/platform/api/quiche_export.h"
#include "quiche/spdy/core/spdy_simple_arena.h"

namespace spdy {

// This class provides a backing store for absl::string_views. It previously
// used custom allocation logic, but now uses an UnsafeArena instead. It has the
// property that absl::string_views that refer to data in Http2HeaderStorage are
// never invalidated until the Http2HeaderStorage is deleted or Clear() is
// called.
//
// Write operations always append to the last block. If there is not enough
// space to perform the write, a new block is allocated, and any unused space
// is wasted.
class QUICHE_EXPORT_PRIVATE Http2HeaderStorage {
 public:
  Http2HeaderStorage();

  Http2HeaderStorage(const Http2HeaderStorage&) = delete;
  Http2HeaderStorage& operator=(const Http2HeaderStorage&) = delete;

  Http2HeaderStorage(Http2HeaderStorage&& other) = default;
  Http2HeaderStorage& operator=(Http2HeaderStorage&& other) = default;

  absl::string_view Write(absl::string_view s);

  // If |s| points to the most recent allocation from arena_, the arena will
  // reclaim the memory. Otherwise, this method is a no-op.
  void Rewind(absl::string_view s);

  void Clear() { arena_.Reset(); }

  // Given a list of fragments and a separator, writes the fragments joined by
  // the separator to a contiguous region of memory. Returns a absl::string_view
  // pointing to the region of memory.
  absl::string_view WriteFragments(
      const std::vector<absl::string_view>& fragments,
      absl::string_view separator);

  size_t bytes_allocated() const { return arena_.status().bytes_allocated(); }

 private:
  SpdySimpleArena arena_;
};

// Writes |fragments| to |dst|, joined by |separator|. |dst| must be large
// enough to hold the result. Returns the number of bytes written.
QUICHE_EXPORT_PRIVATE size_t
Join(char* dst, const std::vector<absl::string_view>& fragments,
     absl::string_view separator);

}  // namespace spdy

#endif  // QUICHE_SPDY_CORE_HTTP2_HEADER_STORAGE_H_
