// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_STREAMS_QUEUE_WITH_SIZES_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_STREAMS_QUEUE_WITH_SIZES_H_

#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/bindings/trace_wrapper_member.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/heap/heap.h"
#include "third_party/blink/renderer/platform/heap/heap_allocator.h"
#include "third_party/blink/renderer/platform/heap/member.h"
#include "v8/include/v8.h"

namespace blink {

class ExceptionState;
class Visitor;

// Implementation of the "Queue-with-sizes" operations from the standard. Unlike
// the standard, these operations do not operate polymorphically on the
// container, but require it to have a QueueWithSizes member.
// https://streams.spec.whatwg.org/#queue-with-sizes
class CORE_EXPORT QueueWithSizes final
    : public GarbageCollectedFinalized<QueueWithSizes> {
 public:
  QueueWithSizes();
  ~QueueWithSizes();

  // https://streams.spec.whatwg.org/#dequeue-value
  v8::Local<v8::Value> DequeueValue(v8::Isolate*);

  // Unlike in the standard, this implementation expects the conversion of
  // |size| to a number to be done by the caller.
  // https://streams.spec.whatwg.org/#enqueue-value-with-size
  void EnqueueValueWithSize(v8::Isolate*,
                            v8::Local<v8::Value> value,
                            double size,
                            ExceptionState&);

  // https://streams.spec.whatwg.org/#peek-queue-value
  v8::Local<v8::Value> PeekQueueValue(v8::Isolate*);

  double TotalSize() { return queue_total_size_; }

  // Not part of the standard.
  bool IsEmpty() { return queue_.IsEmpty(); }

  // https://streams.spec.whatwg.org/#reset-queue
  void ResetQueue();

  void Trace(Visitor* visitor);

 private:
  class ValueSizePair;

  HeapDeque<TraceWrapperMember<ValueSizePair>> queue_;
  double queue_total_size_ = 0;
};

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_STREAMS_QUEUE_WITH_SIZES_H_
