BoxStream.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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/Stream.h>
  8. namespace Gfx::ISOBMFF {
  9. class BoxStream final : public Stream {
  10. public:
  11. explicit BoxStream(Stream& stream, size_t size)
  12. : m_stream(stream)
  13. , m_data_left(size)
  14. {
  15. }
  16. virtual bool is_eof() const override { return m_stream.is_eof() || remaining() == 0; }
  17. virtual bool is_open() const override { return m_stream.is_open(); }
  18. virtual void close() override { m_stream.close(); }
  19. virtual ErrorOr<Bytes> read_some(Bytes bytes) override
  20. {
  21. auto read_bytes = TRY(m_stream.read_some(bytes));
  22. m_data_left -= min(read_bytes.size(), m_data_left);
  23. return read_bytes;
  24. }
  25. virtual ErrorOr<size_t> write_some(ReadonlyBytes) override { VERIFY_NOT_REACHED(); }
  26. virtual ErrorOr<void> write_until_depleted(ReadonlyBytes) override { VERIFY_NOT_REACHED(); }
  27. size_t remaining() const
  28. {
  29. return m_data_left;
  30. }
  31. ErrorOr<void> discard_remaining()
  32. {
  33. return discard(remaining());
  34. }
  35. private:
  36. Stream& m_stream;
  37. size_t m_data_left;
  38. };
  39. }