BoxStream.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * Copyright (c) 2023, Gregory Bertilson <Zaggy1024@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/MaybeOwned.h>
  8. #include <AK/Stream.h>
  9. namespace Gfx::ISOBMFF {
  10. class BoxStream final : public Stream {
  11. public:
  12. explicit BoxStream(MaybeOwned<Stream> stream, size_t size)
  13. : m_stream(move(stream))
  14. , m_data_left(size)
  15. {
  16. }
  17. virtual bool is_eof() const override { return m_stream->is_eof() || remaining() == 0; }
  18. virtual bool is_open() const override { return m_stream->is_open(); }
  19. virtual void close() override { m_stream->close(); }
  20. virtual ErrorOr<Bytes> read_some(Bytes bytes) override
  21. {
  22. auto read_bytes = TRY(m_stream->read_some(bytes));
  23. m_data_left -= min(read_bytes.size(), m_data_left);
  24. return read_bytes;
  25. }
  26. virtual ErrorOr<size_t> write_some(ReadonlyBytes) override { VERIFY_NOT_REACHED(); }
  27. virtual ErrorOr<void> write_until_depleted(ReadonlyBytes) override { VERIFY_NOT_REACHED(); }
  28. size_t remaining() const
  29. {
  30. return m_data_left;
  31. }
  32. ErrorOr<void> discard_remaining()
  33. {
  34. return discard(remaining());
  35. }
  36. private:
  37. MaybeOwned<Stream> m_stream;
  38. size_t m_data_left;
  39. };
  40. }