CIODeviceStreamReader.h 629 B

12345678910111213141516171819202122232425262728293031
  1. #pragma once
  2. #include <AK/StdLibExtras.h>
  3. #include <LibCore/CIODevice.h>
  4. class CIODeviceStreamReader {
  5. public:
  6. CIODeviceStreamReader(CIODevice& device)
  7. : m_device(device)
  8. {
  9. }
  10. bool handle_read_failure()
  11. {
  12. return exchange(m_had_failure, false);
  13. }
  14. template<typename T>
  15. CIODeviceStreamReader& operator>>(T& value)
  16. {
  17. int nread = m_device.read((u8*)&value, sizeof(T));
  18. ASSERT(nread == sizeof(T));
  19. if (nread != sizeof(T))
  20. m_had_failure = true;
  21. return *this;
  22. }
  23. private:
  24. CIODevice& m_device;
  25. bool m_had_failure { false };
  26. };