/src/serenity/AK/Stream.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2021, sin-ack <sin-ack@protonmail.com> |
3 | | * Copyright (c) 2022, the SerenityOS developers. |
4 | | * |
5 | | * SPDX-License-Identifier: BSD-2-Clause |
6 | | */ |
7 | | |
8 | | #pragma once |
9 | | |
10 | | #include <AK/Concepts.h> |
11 | | #include <AK/Error.h> |
12 | | #include <AK/Format.h> |
13 | | #include <AK/Forward.h> |
14 | | #include <AK/StringView.h> |
15 | | #include <AK/Traits.h> |
16 | | |
17 | | namespace AK { |
18 | | |
19 | | /// The base, abstract class for stream operations. This class defines the |
20 | | /// operations one can perform on every stream. |
21 | | /// Operations without a sensible default that are unsupported by an implementation |
22 | | /// of a Stream should return EBADF as an error. |
23 | | class Stream { |
24 | | public: |
25 | | /// Reads into a buffer, with the maximum size being the size of the buffer. |
26 | | /// The amount of bytes read can be smaller than the size of the buffer. |
27 | | /// Returns either the bytes that were read, or an errno in the case of |
28 | | /// failure. |
29 | | virtual ErrorOr<Bytes> read_some(Bytes) = 0; |
30 | | /// Tries to fill the entire buffer through reading. Returns whether the |
31 | | /// buffer was filled without an error. |
32 | | virtual ErrorOr<void> read_until_filled(Bytes); |
33 | | /// Reads the stream until EOF, storing the contents into a ByteBuffer which |
34 | | /// is returned once EOF is encountered. The block size determines the size |
35 | | /// of newly allocated chunks while reading. |
36 | | virtual ErrorOr<ByteBuffer> read_until_eof(size_t block_size = 4096); |
37 | | /// Discards the given number of bytes from the stream. As this is usually used |
38 | | /// as an efficient version of `read_until_filled`, it returns an error |
39 | | /// if reading failed or if not all bytes could be discarded. |
40 | | /// Unless specifically overwritten, this just uses read() to read into an |
41 | | /// internal stack-based buffer. |
42 | | virtual ErrorOr<void> discard(size_t discarded_bytes); |
43 | | |
44 | | /// Tries to write the entire contents of the buffer. It is possible for |
45 | | /// less than the full buffer to be written. Returns either the amount of |
46 | | /// bytes written into the stream, or an errno in the case of failure. |
47 | | virtual ErrorOr<size_t> write_some(ReadonlyBytes) = 0; |
48 | | /// Same as write, but does not return until either the entire buffer |
49 | | /// contents are written or an error occurs. |
50 | | virtual ErrorOr<void> write_until_depleted(ReadonlyBytes); |
51 | | |
52 | | template<Concepts::AnyString T> |
53 | | ErrorOr<void> write_until_depleted(T const& buffer) |
54 | 1.70M | { |
55 | 1.70M | return write_until_depleted(StringView { buffer }.bytes()); |
56 | 1.70M | } _ZN2AK6Stream20write_until_depletedITkNS_8Concepts9AnyStringENS_4SpanIhEEEENS_7ErrorOrIvNS_5ErrorEEERKT_ Line | Count | Source | 54 | 1.67M | { | 55 | 1.67M | return write_until_depleted(StringView { buffer }.bytes()); | 56 | 1.67M | } |
_ZN2AK6Stream20write_until_depletedITkNS_8Concepts9AnyStringENS_6Detail10ByteBufferILm32EEEEENS_7ErrorOrIvNS_5ErrorEEERKT_ Line | Count | Source | 54 | 33.2k | { | 55 | 33.2k | return write_until_depleted(StringView { buffer }.bytes()); | 56 | 33.2k | } |
Unexecuted instantiation: _ZN2AK6Stream20write_until_depletedITkNS_8Concepts9AnyStringENS_10ByteStringEEENS_7ErrorOrIvNS_5ErrorEEERKT_ Unexecuted instantiation: _ZN2AK6Stream20write_until_depletedITkNS_8Concepts9AnyStringENS_10StringViewEEENS_7ErrorOrIvNS_5ErrorEEERKT_ Unexecuted instantiation: _ZN2AK6Stream20write_until_depletedITkNS_8Concepts9AnyStringENS_5ArrayIhLm4EEEEENS_7ErrorOrIvNS_5ErrorEEERKT_ Unexecuted instantiation: _ZN2AK6Stream20write_until_depletedITkNS_8Concepts9AnyStringENS_5ArrayIhLm8EEEEENS_7ErrorOrIvNS_5ErrorEEERKT_ |
57 | | |
58 | | template<typename T> |
59 | | requires(requires(Stream& stream) { { T::read_from_stream(stream) } -> SameAs<ErrorOr<T>>; }) |
60 | | ErrorOr<T> read_value() |
61 | 38.7M | { |
62 | 38.7M | return T::read_from_stream(*this); |
63 | 38.7M | } _ZN2AK6Stream10read_valueINS_6LEB128IjEEQrQRS0__XclsrT_16read_from_streamfL0p_ERNS_8Concepts6SameAsINS_7ErrorOrIS5_NS_5ErrorEEEEEEEESA_v Line | Count | Source | 61 | 35.7M | { | 62 | 35.7M | return T::read_from_stream(*this); | 63 | 35.7M | } |
_ZN2AK6Stream10read_valueIN4RIFF6Detail10FileHeaderINS3_11ChunkHeaderINS_12LittleEndianIjEEEEEEQrQRS0__XclsrT_16read_from_streamfL0p_ERNS_8Concepts6SameAsINS_7ErrorOrISB_NS_5ErrorEEEEEEEESG_v Line | Count | Source | 61 | 4.44k | { | 62 | 4.44k | return T::read_from_stream(*this); | 63 | 4.44k | } |
_ZN2AK6Stream10read_valueIN4RIFF6Detail11ChunkHeaderINS_9BigEndianIjEEEEQrQRS0__XclsrT_16read_from_streamfL0p_ERNS_8Concepts6SameAsINS_7ErrorOrIS9_NS_5ErrorEEEEEEEESE_v Line | Count | Source | 61 | 473 | { | 62 | 473 | return T::read_from_stream(*this); | 63 | 473 | } |
_ZN2AK6Stream10read_valueIN4RIFF6Detail11ChunkHeaderINS_12LittleEndianIjEEEEQrQRS0__XclsrT_16read_from_streamfL0p_ERNS_8Concepts6SameAsINS_7ErrorOrIS9_NS_5ErrorEEEEEEEESE_v Line | Count | Source | 61 | 710k | { | 62 | 710k | return T::read_from_stream(*this); | 63 | 710k | } |
_ZN2AK6Stream10read_valueIN4RIFF7ChunkIDEQrQRS0__XclsrT_16read_from_streamfL0p_ERNS_8Concepts6SameAsINS_7ErrorOrIS5_NS_5ErrorEEEEEEEESA_v Line | Count | Source | 61 | 1.03M | { | 62 | 1.03M | return T::read_from_stream(*this); | 63 | 1.03M | } |
_ZN2AK6Stream10read_valueIN4RIFF6Detail10OwnedChunkINS3_11ChunkHeaderINS_12LittleEndianIjEEEEEEQrQRS0__XclsrT_16read_from_streamfL0p_ERNS_8Concepts6SameAsINS_7ErrorOrISB_NS_5ErrorEEEEEEEESG_v Line | Count | Source | 61 | 706k | { | 62 | 706k | return T::read_from_stream(*this); | 63 | 706k | } |
_ZN2AK6Stream10read_valueINS_6LEB128IiEEQrQRS0__XclsrT_16read_from_streamfL0p_ERNS_8Concepts6SameAsINS_7ErrorOrIS5_NS_5ErrorEEEEEEEESA_v Line | Count | Source | 61 | 157k | { | 62 | 157k | return T::read_from_stream(*this); | 63 | 157k | } |
_ZN2AK6Stream10read_valueINS_6LEB128IlEEQrQRS0__XclsrT_16read_from_streamfL0p_ERNS_8Concepts6SameAsINS_7ErrorOrIS5_NS_5ErrorEEEEEEEESA_v Line | Count | Source | 61 | 30.9k | { | 62 | 30.9k | return T::read_from_stream(*this); | 63 | 30.9k | } |
_ZN2AK6Stream10read_valueIN5Audio3QOA11FrameHeaderEQrQRS0__XclsrT_16read_from_streamfL0p_ERNS_8Concepts6SameAsINS_7ErrorOrIS6_NS_5ErrorEEEEEEEESB_v Line | Count | Source | 61 | 246k | { | 62 | 246k | return T::read_from_stream(*this); | 63 | 246k | } |
_ZN2AK6Stream10read_valueIN4RIFF9OwnedListEQrQRS0__XclsrT_16read_from_streamfL0p_ERNS_8Concepts6SameAsINS_7ErrorOrIS5_NS_5ErrorEEEEEEEESA_v Line | Count | Source | 61 | 54.6k | { | 62 | 54.6k | return T::read_from_stream(*this); | 63 | 54.6k | } |
|
64 | | |
65 | | template<typename T> |
66 | | requires(Traits<T>::is_trivially_serializable()) |
67 | | ErrorOr<T> read_value() |
68 | 529M | { |
69 | 529M | alignas(T) u8 buffer[sizeof(T)] = {}; |
70 | 529M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); |
71 | 0 | return bit_cast<T>(buffer); |
72 | 529M | } Unexecuted instantiation: _ZN2AK6Stream10read_valueImQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv _ZN2AK6Stream10read_valueIjQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv Line | Count | Source | 68 | 3.85k | { | 69 | 3.85k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 3.85k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 3.85k | } |
Unexecuted instantiation: _ZN2AK6Stream10read_valueIN3Gfx12BitmapFormatEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Unexecuted instantiation: _ZN2AK6Stream10read_valueIiQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv _ZN2AK6Stream10read_valueIhQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv Line | Count | Source | 68 | 164M | { | 69 | 164M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 164M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 164M | } |
_ZN2AK6Stream10read_valueIN3Gfx9DDSHeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 3.59k | { | 69 | 3.59k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 3.59k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 3.59k | } |
_ZN2AK6Stream10read_valueIN3Gfx14DDSHeaderDXT10EQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 26 | { | 69 | 26 | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 26 | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 26 | } |
_ZN2AK6Stream10read_valueINS_12LittleEndianIhEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 3.77M | { | 69 | 3.77M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 3.77M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 3.77M | } |
_ZN2AK6Stream10read_valueINS_12LittleEndianItEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 214M | { | 69 | 214M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 214M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 214M | } |
_ZN2AK6Stream10read_valueIN3Gfx7ICONDIREQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 5.74k | { | 69 | 5.74k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 5.74k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 5.74k | } |
_ZN2AK6Stream10read_valueIN3Gfx12ICONDIRENTRYEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 450k | { | 69 | 450k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 450k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 450k | } |
_ZN2AK6Stream10read_valueINS_9BigEndianIjEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 14.4M | { | 69 | 14.4M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 14.4M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 14.4M | } |
_ZN2AK6Stream10read_valueINS_9BigEndianItEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 13.1M | { | 69 | 13.1M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 13.1M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 13.1M | } |
_ZN2AK6Stream10read_valueIaQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv Line | Count | Source | 68 | 20.9M | { | 69 | 20.9M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 20.9M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 20.9M | } |
_ZN2AK6Stream10read_valueINS_9BigEndianIiEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 5.70M | { | 69 | 5.70M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 5.70M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 5.70M | } |
Unexecuted instantiation: _ZN2AK6Stream10read_valueINS_9BigEndianIhEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv _ZN2AK6Stream10read_valueINS_9BigEndianIN3Gfx7ISOBMFF7BoxTypeEEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS7_NS_5ErrorEEEv Line | Count | Source | 68 | 912k | { | 69 | 912k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 912k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 912k | } |
_ZN2AK6Stream10read_valueINS_9BigEndianImEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 1.43M | { | 69 | 1.43M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 1.43M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 1.43M | } |
_ZN2AK6Stream10read_valueINS_9BigEndianIN3Gfx7ISOBMFF15BrandIdentifierEEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS7_NS_5ErrorEEEv Line | Count | Source | 68 | 1.00M | { | 69 | 1.00M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 1.00M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 1.00M | } |
_ZN2AK6Stream10read_valueIN3Gfx9QOIHeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 381 | { | 69 | 381 | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 381 | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 381 | } |
_ZN2AK6Stream10read_valueIN3Gfx9TGAHeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 357 | { | 69 | 357 | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 357 | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 357 | } |
_ZN2AK6Stream10read_valueItQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv Line | Count | Source | 68 | 11.5k | { | 69 | 11.5k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 11.5k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 11.5k | } |
_ZN2AK6Stream10read_valueINS_12LittleEndianIjEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 44.3M | { | 69 | 44.3M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 44.3M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 44.3M | } |
_ZN2AK6Stream10read_valueINS_12LittleEndianIiEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 13.9M | { | 69 | 13.9M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 13.9M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 13.9M | } |
_ZN2AK6Stream10read_valueINS_12LittleEndianIfEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 2.71M | { | 69 | 2.71M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 2.71M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 2.71M | } |
_ZN2AK6Stream10read_valueINS_9BigEndianIfEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 90.3k | { | 69 | 90.3k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 90.3k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 90.3k | } |
_ZN2AK6Stream10read_valueINS_12LittleEndianIdEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 8.56M | { | 69 | 8.56M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 8.56M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 8.56M | } |
_ZN2AK6Stream10read_valueINS_9BigEndianIdEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 441k | { | 69 | 441k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 441k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 441k | } |
_ZN2AK6Stream10read_valueINS_12LittleEndianIsEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 319k | { | 69 | 319k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 319k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 319k | } |
_ZN2AK6Stream10read_valueIN3Gfx6FourCCEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 7.44k | { | 69 | 7.44k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 7.44k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 7.44k | } |
_ZN2AK6Stream10read_valueINS_9BigEndianIsEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 95.1k | { | 69 | 95.1k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 95.1k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 95.1k | } |
_ZN2AK6Stream10read_valueIN4WOFF6HeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 1.89k | { | 69 | 1.89k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 1.89k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 1.89k | } |
_ZN2AK6Stream10read_valueIN4WOFF19TableDirectoryEntryEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 8.41k | { | 69 | 8.41k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 8.41k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 8.41k | } |
Unexecuted instantiation: _ZN2AK6Stream10read_valueIbQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv _ZN2AK6Stream10read_valueIN8Compress10ZlibHeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 9.12k | { | 69 | 9.12k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 9.12k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 9.12k | } |
Unexecuted instantiation: _ZN2AK6Stream10read_valueIlQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv _ZN2AK6Stream10read_valueINS_12LittleEndianImEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 2.58k | { | 69 | 2.58k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 2.58k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 2.58k | } |
_ZN2AK6Stream10read_valueINS_12LittleEndianINS_6Detail12UFixedBigIntILm128ENS3_13StaticStorageILb0ELm128EEEEEEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS9_NS_5ErrorEEEv Line | Count | Source | 68 | 410 | { | 69 | 410 | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 410 | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 410 | } |
_ZN2AK6Stream10read_valueIN7Archive13TarFileHeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 9.40k | { | 69 | 9.40k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 9.40k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 9.40k | } |
_ZN2AK6Stream10read_valueIN8Compress10LzmaHeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 3.35k | { | 69 | 3.35k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 3.35k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 3.35k | } |
_ZN2AK6Stream10read_valueIcQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv Line | Count | Source | 68 | 5.13M | { | 69 | 5.13M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 5.13M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 5.13M | } |
_ZN2AK6Stream10read_valueIN5WOFF220TransformedGlyfTableEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 976 | { | 69 | 976 | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 976 | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 976 | } |
_ZN2AK6Stream10read_valueIN5WOFF26HeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 3.86k | { | 69 | 3.86k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 3.86k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 3.86k | } |
Unexecuted instantiation: _ZN2AK6Stream10read_valueINS_9BigEndianINS_6Detail12UFixedBigIntILm256ENS3_13StaticStorageILb0ELm256EEEEEEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS9_NS_5ErrorEEEv Unexecuted instantiation: _ZN2AK6Stream10read_valueINS_9BigEndianINS_6Detail12UFixedBigIntILm384ENS3_13StaticStorageILb0ELm384EEEEEEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS9_NS_5ErrorEEEv Unexecuted instantiation: _ZN2AK6Stream10read_valueINS_12LittleEndianIlEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv _ZN2AK6Stream10read_valueINS_12LittleEndianIaEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 7.72k | { | 69 | 7.72k | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 7.72k | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 7.72k | } |
Unexecuted instantiation: _ZN2AK6Stream10read_valueIsQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv Unexecuted instantiation: _ZN2AK6Stream10read_valueIdQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS2_NS_5ErrorEEEv _ZN2AK6Stream10read_valueIN3HID10ItemHeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIS4_NS_5ErrorEEEv Line | Count | Source | 68 | 13.4M | { | 69 | 13.4M | alignas(T) u8 buffer[sizeof(T)] = {}; | 70 | 13.4M | TRY(read_until_filled({ &buffer, sizeof(buffer) })); | 71 | 0 | return bit_cast<T>(buffer); | 72 | 13.4M | } |
|
73 | | |
74 | | template<typename T> |
75 | | requires(requires(T t, Stream& stream) { { t.write_to_stream(stream) } -> SameAs<ErrorOr<void>>; }) |
76 | | ErrorOr<void> write_value(T const& value) |
77 | 1.72M | { |
78 | 1.72M | return value.write_to_stream(*this); |
79 | 1.72M | } |
80 | | |
81 | | template<typename T> |
82 | | requires(Traits<T>::is_trivially_serializable()) |
83 | | ErrorOr<void> write_value(T const& value) |
84 | 84.9M | { |
85 | 84.9M | return write_until_depleted({ &value, sizeof(value) }); |
86 | 84.9M | } Unexecuted instantiation: _ZN2AK6Stream11write_valueImQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS2_ _ZN2AK6Stream11write_valueIjQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS2_ Line | Count | Source | 84 | 262k | { | 85 | 262k | return write_until_depleted({ &value, sizeof(value) }); | 86 | 262k | } |
Unexecuted instantiation: _ZN2AK6Stream11write_valueIN3Gfx12BitmapFormatEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS4_ _ZN2AK6Stream11write_valueIhQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS2_ Line | Count | Source | 84 | 79.2M | { | 85 | 79.2M | return write_until_depleted({ &value, sizeof(value) }); | 86 | 79.2M | } |
_ZN2AK6Stream11write_valueINS_12LittleEndianItEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS4_ Line | Count | Source | 84 | 8.83k | { | 85 | 8.83k | return write_until_depleted({ &value, sizeof(value) }); | 86 | 8.83k | } |
Unexecuted instantiation: _ZN2AK6Stream11write_valueINS_9BigEndianItEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS4_ Unexecuted instantiation: _ZN2AK6Stream11write_valueINS_9BigEndianIjEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS4_ _ZN2AK6Stream11write_valueIN8Compress10LzmaHeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS4_ Line | Count | Source | 84 | 1.88k | { | 85 | 1.88k | return write_until_depleted({ &value, sizeof(value) }); | 86 | 1.88k | } |
_ZN2AK6Stream11write_valueINS_12LittleEndianIjEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS4_ Line | Count | Source | 84 | 4.60k | { | 85 | 4.60k | return write_until_depleted({ &value, sizeof(value) }); | 86 | 4.60k | } |
_ZN2AK6Stream11write_valueIN3DNS12PacketHeaderEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS4_ Line | Count | Source | 84 | 453 | { | 85 | 453 | return write_until_depleted({ &value, sizeof(value) }); | 86 | 453 | } |
_ZN2AK6Stream11write_valueItQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS2_ Line | Count | Source | 84 | 3.71M | { | 85 | 3.71M | return write_until_depleted({ &value, sizeof(value) }); | 86 | 3.71M | } |
_ZN2AK6Stream11write_valueIcQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS2_ Line | Count | Source | 84 | 1.72M | { | 85 | 1.72M | return write_until_depleted({ &value, sizeof(value) }); | 86 | 1.72M | } |
Unexecuted instantiation: _ZN2AK6Stream11write_valueINS_9BigEndianINS_6Detail12UFixedBigIntILm256ENS3_13StaticStorageILb0ELm256EEEEEEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS9_ Unexecuted instantiation: _ZN2AK6Stream11write_valueINS_9BigEndianINS_6Detail12UFixedBigIntILm384ENS3_13StaticStorageILb0ELm384EEEEEEEQclsr6TraitsIT_EE25is_trivially_serializableEEENS_7ErrorOrIvNS_5ErrorEEERKS9_ |
87 | | |
88 | | template<typename... Parameters> |
89 | | ErrorOr<void> write_formatted(CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters) |
90 | 0 | { |
91 | 0 | VariadicFormatParams<AllowDebugOnlyFormatters::No, Parameters...> variadic_format_params { parameters... }; |
92 | 0 | TRY(write_formatted_impl(fmtstr.view(), variadic_format_params)); |
93 | 0 | return {}; |
94 | 0 | } Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<>(AK::Format::Detail::CheckedFormatString<>&&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<JS::Object*>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<JS::Object*>::Type>&&, JS::Object* const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<AK::StringView>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<AK::StringView>::Type>&&, AK::StringView const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<AK::DeprecatedFlyString>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<AK::DeprecatedFlyString>::Type>&&, AK::DeprecatedFlyString const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<AK::ByteString>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<AK::ByteString>::Type>&&, AK::ByteString const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<AK::ByteString, AK::ByteString>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<AK::ByteString>::Type, AK::Detail::__IdentityType<AK::ByteString>::Type>&&, AK::ByteString const&, AK::ByteString const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<unsigned long>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<unsigned long>::Type>&&, unsigned long const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<JS::ArrayBuffer*>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<JS::ArrayBuffer*>::Type>&&, JS::ArrayBuffer* const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<unsigned char>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<unsigned char>::Type>&&, unsigned char const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<unsigned short>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<unsigned short>::Type>&&, unsigned short const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<unsigned int>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<unsigned int>::Type>&&, unsigned int const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<signed char>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<signed char>::Type>&&, signed char const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<short>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<short>::Type>&&, short const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<int>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<int>::Type>&&, int const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<long>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<long>::Type>&&, long const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<float>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<float>::Type>&&, float const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<double>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<double>::Type>&&, double const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<double, double, double, double, double, double, double, double, double, double>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<double>::Type, AK::Detail::__IdentityType<double>::Type, AK::Detail::__IdentityType<double>::Type, AK::Detail::__IdentityType<double>::Type, AK::Detail::__IdentityType<double>::Type, AK::Detail::__IdentityType<double>::Type, AK::Detail::__IdentityType<double>::Type, AK::Detail::__IdentityType<double>::Type, AK::Detail::__IdentityType<double>::Type, AK::Detail::__IdentityType<double>::Type>&&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<int, unsigned char, unsigned char>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<int>::Type, AK::Detail::__IdentityType<unsigned char>::Type, AK::Detail::__IdentityType<unsigned char>::Type>&&, int const&, unsigned char const&, unsigned char const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned short, unsigned short, unsigned short>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<int>::Type, AK::Detail::__IdentityType<unsigned char>::Type, AK::Detail::__IdentityType<unsigned char>::Type, AK::Detail::__IdentityType<unsigned char>::Type, AK::Detail::__IdentityType<unsigned char>::Type, AK::Detail::__IdentityType<unsigned char>::Type, AK::Detail::__IdentityType<unsigned short>::Type, AK::Detail::__IdentityType<unsigned short>::Type, AK::Detail::__IdentityType<unsigned short>::Type>&&, int const&, unsigned char const&, unsigned char const&, unsigned char const&, unsigned char const&, unsigned char const&, unsigned short const&, unsigned short const&, unsigned short const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<unsigned char, unsigned char>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<unsigned char>::Type, AK::Detail::__IdentityType<unsigned char>::Type>&&, unsigned char const&, unsigned char const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<unsigned char, unsigned char, unsigned char, unsigned short, unsigned short, unsigned short>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<unsigned char>::Type, AK::Detail::__IdentityType<unsigned char>::Type, AK::Detail::__IdentityType<unsigned char>::Type, AK::Detail::__IdentityType<unsigned short>::Type, AK::Detail::__IdentityType<unsigned short>::Type, AK::Detail::__IdentityType<unsigned short>::Type>&&, unsigned char const&, unsigned char const&, unsigned char const&, unsigned short const&, unsigned short const&, unsigned short const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<int, unsigned char>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<int>::Type, AK::Detail::__IdentityType<unsigned char>::Type>&&, int const&, unsigned char const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<JS::PropertyKey>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<JS::PropertyKey>::Type>&&, JS::PropertyKey const&) Unexecuted instantiation: AK::ErrorOr<void, AK::Error> AK::Stream::write_formatted<AK::String>(AK::Format::Detail::CheckedFormatString<AK::Detail::__IdentityType<AK::String>::Type>&&, AK::String const&) |
95 | | |
96 | | /// Returns whether the stream has reached the end of file. For sockets, |
97 | | /// this most likely means that the protocol has disconnected (in the case |
98 | | /// of TCP). For seekable streams, this means the end of the file. Note that |
99 | | /// is_eof will only return true _after_ a read with 0 length, so this |
100 | | /// method should be called after a read. |
101 | | virtual bool is_eof() const = 0; |
102 | | |
103 | | virtual bool is_open() const = 0; |
104 | | virtual void close() = 0; |
105 | | |
106 | | virtual ~Stream() |
107 | 7.24M | { |
108 | 7.24M | } |
109 | | |
110 | | protected: |
111 | | /// Provides a default implementation of read_until_eof that works for streams |
112 | | /// that behave like POSIX file descriptors. expected_file_size can be |
113 | | /// passed as a heuristic for what the Stream subclass expects the file |
114 | | /// content size to be in order to reduce allocations (does not affect |
115 | | /// actual reading). |
116 | | ErrorOr<ByteBuffer> read_until_eof_impl(size_t block_size, size_t expected_file_size = 0); |
117 | | |
118 | | private: |
119 | | ErrorOr<void> write_formatted_impl(StringView, TypeErasedFormatParams&); |
120 | | }; |
121 | | |
122 | | enum class SeekMode { |
123 | | SetPosition, |
124 | | FromCurrentPosition, |
125 | | FromEndPosition, |
126 | | }; |
127 | | |
128 | | /// Adds seekability to a Stream. Classes inheriting from SeekableStream |
129 | | /// will be seekable to any point in the stream. |
130 | | class SeekableStream : public Stream { |
131 | | public: |
132 | | /// Seeks to the given position in the given mode. Returns either the |
133 | | /// current position of the file, or an errno in the case of an error. |
134 | | virtual ErrorOr<size_t> seek(i64 offset, SeekMode) = 0; |
135 | | /// Returns the current position of the file, or an errno in the case of |
136 | | /// an error. |
137 | | virtual ErrorOr<size_t> tell() const; |
138 | | /// Returns the total size of the stream, or an errno in the case of an |
139 | | /// error. May not preserve the original position on the stream on failure. |
140 | | virtual ErrorOr<size_t> size(); |
141 | | /// Shrinks or extends the stream to the given size. Returns an errno in |
142 | | /// the case of an error. |
143 | | virtual ErrorOr<void> truncate(size_t length) = 0; |
144 | | /// Seeks until after the given amount of bytes to be discarded instead of |
145 | | /// reading and discarding everything manually; |
146 | | virtual ErrorOr<void> discard(size_t discarded_bytes) override; |
147 | | }; |
148 | | |
149 | | } |
150 | | |
151 | | #if USING_AK_GLOBALLY |
152 | | using AK::SeekMode; |
153 | | #endif |