mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:27:35 +00:00
LibJS: Add some TypedArray abstractions for querying underlying type
IsUnclampedIntegerElementType and IsBigIntElementType.
This commit is contained in:
parent
f4ea6b1824
commit
4f8f79c5ca
1 changed files with 16 additions and 0 deletions
|
@ -40,6 +40,10 @@ public:
|
|||
virtual size_t element_size() const = 0;
|
||||
virtual String element_name() const = 0;
|
||||
|
||||
// 25.1.2.6 IsUnclampedIntegerElementType ( type ), https://tc39.es/ecma262/#sec-isunclampedintegerelementtype
|
||||
virtual bool is_unclamped_integer_element_type() const = 0;
|
||||
// 25.1.2.7 IsBigIntElementType ( type ), https://tc39.es/ecma262/#sec-isbigintelementtype
|
||||
virtual bool is_bigint_element_type() const = 0;
|
||||
// 25.1.2.10 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isTypedArray, order [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-getvaluefrombuffer
|
||||
virtual Value get_value_from_buffer(size_t byte_index, ArrayBuffer::Order, bool is_little_endian = true) const = 0;
|
||||
// 25.1.2.12 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isTypedArray, order [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-setvalueinbuffer
|
||||
|
@ -438,6 +442,18 @@ public:
|
|||
|
||||
virtual size_t element_size() const override { return sizeof(UnderlyingBufferDataType); };
|
||||
|
||||
bool is_unclamped_integer_element_type() const override
|
||||
{
|
||||
constexpr bool is_unclamped_integer = IsSame<T, i8> || IsSame<T, u8> || IsSame<T, i16> || IsSame<T, u16> || IsSame<T, i32> || IsSame<T, u32>;
|
||||
return is_unclamped_integer;
|
||||
}
|
||||
|
||||
bool is_bigint_element_type() const override
|
||||
{
|
||||
constexpr bool is_bigint = IsSame<T, i64> || IsSame<T, u64>;
|
||||
return is_bigint;
|
||||
}
|
||||
|
||||
Value get_value_from_buffer(size_t byte_index, ArrayBuffer::Order order, bool is_little_endian = true) const override { return viewed_array_buffer()->template get_value<T>(byte_index, true, order, is_little_endian); }
|
||||
void set_value_in_buffer(size_t byte_index, Value value, ArrayBuffer::Order order, bool is_little_endian = true) override { viewed_array_buffer()->template set_value<T>(byte_index, value, true, order, is_little_endian); }
|
||||
Value get_modify_set_value_in_buffer(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian = true) override { return viewed_array_buffer()->template get_modify_set_value<T>(byte_index, value, move(operation), is_little_endian); }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue