mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-15 20:33:10 +00:00
LibWeb: Move Streams/QueueOperations.h to Streams/AbstractOperations.h
This made more sense in the beginning, but now AbstractOperations.h is so large that there isn't much benefit. This will resolve some ugly include order issues in the coming commits.
This commit is contained in:
parent
edf85d39c6
commit
1f7f63ae5a
|
@ -9,7 +9,7 @@
|
|||
|
||||
#include <LibJS/Heap/GCPtr.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
#include <LibWeb/Streams/QueueOperations.h>
|
||||
#include <LibWeb/WebIDL/ExceptionOr.h>
|
||||
#include <LibWeb/WebIDL/Promise.h>
|
||||
|
||||
namespace Web::Streams {
|
||||
|
@ -93,4 +93,86 @@ JS::Value create_close_sentinel();
|
|||
bool is_close_sentinel(JS::Value);
|
||||
JS::ThrowCompletionOr<JS::Handle<WebIDL::CallbackType>> property_to_callback(JS::VM& vm, JS::Value value, JS::PropertyKey const& property_key);
|
||||
|
||||
// https://streams.spec.whatwg.org/#value-with-size
|
||||
struct ValueWithSize {
|
||||
JS::Value value;
|
||||
double size;
|
||||
};
|
||||
|
||||
// https://streams.spec.whatwg.org/#dequeue-value
|
||||
template<typename T>
|
||||
JS::Value dequeue_value(T& container)
|
||||
{
|
||||
// 1. Assert: container has [[queue]] and [[queueTotalSize]] internal slots.
|
||||
|
||||
// 2. Assert: container.[[queue]] is not empty.
|
||||
VERIFY(!container.queue().is_empty());
|
||||
|
||||
// 3. Let valueWithSize be container.[[queue]][0].
|
||||
// 4. Remove valueWithSize from container.[[queue]].
|
||||
auto value_with_size = container.queue().take_first();
|
||||
|
||||
// 5. Set container.[[queueTotalSize]] to container.[[queueTotalSize]] − valueWithSize’s size.
|
||||
container.set_queue_total_size(container.queue_total_size() - value_with_size.size);
|
||||
|
||||
// 6. If container.[[queueTotalSize]] < 0, set container.[[queueTotalSize]] to 0. (This can occur due to rounding errors.)
|
||||
if (container.queue_total_size() < 0.0)
|
||||
container.set_queue_total_size(0.0);
|
||||
|
||||
// 7. Return valueWithSize’s value.
|
||||
return value_with_size.value;
|
||||
}
|
||||
|
||||
// https://streams.spec.whatwg.org/#enqueue-value-with-size
|
||||
template<typename T>
|
||||
WebIDL::ExceptionOr<void> enqueue_value_with_size(T& container, JS::Value value, double size)
|
||||
{
|
||||
// 1. Assert: container has [[queue]] and [[queueTotalSize]] internal slots.
|
||||
|
||||
// 2. If ! IsNonNegativeNumber(size) is false, throw a RangeError exception.
|
||||
if (size < 0.0)
|
||||
return WebIDL::SimpleException { WebIDL::SimpleExceptionType::RangeError, "Chunk has negative size"sv };
|
||||
|
||||
// 3. If size is +∞, throw a RangeError exception.
|
||||
if (size == HUGE_VAL)
|
||||
return WebIDL::SimpleException { WebIDL::SimpleExceptionType::RangeError, "Chunk has infinite size"sv };
|
||||
|
||||
// 4. Append a new value-with-size with value value and size size to container.[[queue]].
|
||||
container.queue().append({ value, size });
|
||||
|
||||
// 5. Set container.[[queueTotalSize]] to container.[[queueTotalSize]] + size.
|
||||
container.set_queue_total_size(container.queue_total_size() + size);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
// https://streams.spec.whatwg.org/#peek-queue-value
|
||||
template<typename T>
|
||||
JS::Value peek_queue_value(T& container)
|
||||
{
|
||||
// 1. Assert: container has [[queue]] and [[queueTotalSize]] internal slots.
|
||||
|
||||
// 2. Assert: container.[[queue]] is not empty.
|
||||
VERIFY(!container.queue().is_empty());
|
||||
|
||||
// 3. Let valueWithSize be container.[[queue]][0].
|
||||
auto& value_with_size = container.queue().first();
|
||||
|
||||
// 4. Return valueWithSize’s value.
|
||||
return value_with_size.value;
|
||||
}
|
||||
|
||||
// https://streams.spec.whatwg.org/#reset-queue
|
||||
template<typename T>
|
||||
void reset_queue(T& container)
|
||||
{
|
||||
// 1. Assert: container has [[queue]] and [[queueTotalSize]] internal slots.
|
||||
|
||||
// 2. Set container.[[queue]] to a new empty list.
|
||||
container.queue().clear();
|
||||
|
||||
// 3. Set container.[[queueTotalSize]] to 0.
|
||||
container.set_queue_total_size(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,96 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Matthew Olsson <mattco@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibJS/Runtime/Error.h>
|
||||
#include <LibWeb/WebIDL/ExceptionOr.h>
|
||||
|
||||
namespace Web::Streams {
|
||||
|
||||
// https://streams.spec.whatwg.org/#value-with-size
|
||||
struct ValueWithSize {
|
||||
JS::Value value;
|
||||
double size;
|
||||
};
|
||||
|
||||
// https://streams.spec.whatwg.org/#dequeue-value
|
||||
template<typename T>
|
||||
JS::Value dequeue_value(T& container)
|
||||
{
|
||||
// 1. Assert: container has [[queue]] and [[queueTotalSize]] internal slots.
|
||||
|
||||
// 2. Assert: container.[[queue]] is not empty.
|
||||
VERIFY(!container.queue().is_empty());
|
||||
|
||||
// 3. Let valueWithSize be container.[[queue]][0].
|
||||
// 4. Remove valueWithSize from container.[[queue]].
|
||||
auto value_with_size = container.queue().take_first();
|
||||
|
||||
// 5. Set container.[[queueTotalSize]] to container.[[queueTotalSize]] − valueWithSize’s size.
|
||||
container.set_queue_total_size(container.queue_total_size() - value_with_size.size);
|
||||
|
||||
// 6. If container.[[queueTotalSize]] < 0, set container.[[queueTotalSize]] to 0. (This can occur due to rounding errors.)
|
||||
if (container.queue_total_size() < 0.0)
|
||||
container.set_queue_total_size(0.0);
|
||||
|
||||
// 7. Return valueWithSize’s value.
|
||||
return value_with_size.value;
|
||||
}
|
||||
|
||||
// https://streams.spec.whatwg.org/#enqueue-value-with-size
|
||||
template<typename T>
|
||||
WebIDL::ExceptionOr<void> enqueue_value_with_size(T& container, JS::Value value, double size)
|
||||
{
|
||||
// 1. Assert: container has [[queue]] and [[queueTotalSize]] internal slots.
|
||||
|
||||
// 2. If ! IsNonNegativeNumber(size) is false, throw a RangeError exception.
|
||||
if (size < 0.0)
|
||||
return WebIDL::SimpleException { WebIDL::SimpleExceptionType::RangeError, "Chunk has negative size"sv };
|
||||
|
||||
// 3. If size is +∞, throw a RangeError exception.
|
||||
if (size == HUGE_VAL)
|
||||
return WebIDL::SimpleException { WebIDL::SimpleExceptionType::RangeError, "Chunk has infinite size"sv };
|
||||
|
||||
// 4. Append a new value-with-size with value value and size size to container.[[queue]].
|
||||
container.queue().append({ value, size });
|
||||
|
||||
// 5. Set container.[[queueTotalSize]] to container.[[queueTotalSize]] + size.
|
||||
container.set_queue_total_size(container.queue_total_size() + size);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
// https://streams.spec.whatwg.org/#peek-queue-value
|
||||
template<typename T>
|
||||
JS::Value peek_queue_value(T& container)
|
||||
{
|
||||
// 1. Assert: container has [[queue]] and [[queueTotalSize]] internal slots.
|
||||
|
||||
// 2. Assert: container.[[queue]] is not empty.
|
||||
VERIFY(!container.queue().is_empty());
|
||||
|
||||
// 3. Let valueWithSize be container.[[queue]][0].
|
||||
auto& value_with_size = container.queue().first();
|
||||
|
||||
// 4. Return valueWithSize’s value.
|
||||
return value_with_size.value;
|
||||
}
|
||||
|
||||
// https://streams.spec.whatwg.org/#reset-queue
|
||||
template<typename T>
|
||||
void reset_queue(T& container)
|
||||
{
|
||||
// 1. Assert: container has [[queue]] and [[queueTotalSize]] internal slots.
|
||||
|
||||
// 2. Set container.[[queue]] to a new empty list.
|
||||
container.queue().clear();
|
||||
|
||||
// 3. Set container.[[queueTotalSize]] to 0.
|
||||
container.set_queue_total_size(0);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue