diff options
Diffstat (limited to 'src/common/io/Stream.cpp')
| -rw-r--r-- | src/common/io/Stream.cpp | 199 | 
1 files changed, 0 insertions, 199 deletions
diff --git a/src/common/io/Stream.cpp b/src/common/io/Stream.cpp deleted file mode 100644 index 6b0a513c..00000000 --- a/src/common/io/Stream.cpp +++ /dev/null @@ -1,199 +0,0 @@ -#include "cru/common/io/Stream.h" -#include "cru/common/Exception.h" -#include "cru/common/Format.h" - -#include <utility> - -namespace cru::io { -StreamOperationNotSupportedException::StreamOperationNotSupportedException( -    String operation) -    : operation_(std::move(operation)) { -  SetMessage(Format(u"Stream operation {} not supported.", operation_)); -} - -void StreamOperationNotSupportedException::CheckSeek(bool seekable) { -  if (!seekable) throw StreamOperationNotSupportedException(u"seek"); -} - -void StreamOperationNotSupportedException::CheckRead(bool readable) { -  if (!readable) throw StreamOperationNotSupportedException(u"read"); -} - -void StreamOperationNotSupportedException::CheckWrite(bool writable) { -  if (!writable) throw StreamOperationNotSupportedException(u"write"); -} - -StreamAlreadyClosedException::StreamAlreadyClosedException() -    : Exception(u"Stream is already closed.") {} - -void StreamAlreadyClosedException::Check(bool closed) { -  if (closed) throw StreamAlreadyClosedException(); -} - -Stream::Stream(SupportedOperations supported_operations) -    : supported_operations_(std::move(supported_operations)), closed_(false) {} - -Stream::Stream(std::optional<bool> can_seek, std::optional<bool> can_read, -               std::optional<bool> can_write) -    : Stream(SupportedOperations{can_seek, can_read, can_write}) {} - -bool Stream::CanSeek() { -  CheckClosed(); -  return DoCanSeek(); -} - -Index Stream::Seek(Index offset, SeekOrigin origin) { -  CheckClosed(); -  StreamOperationNotSupportedException::CheckSeek(DoCanSeek()); -  return DoSeek(offset, origin); -} - -Index Stream::Tell() { -  CheckClosed(); -  return DoTell(); -} - -void Stream::Rewind() { -  CheckClosed(); -  return DoRewind(); -} - -Index Stream::GetSize() { -  CheckClosed(); -  return DoGetSize(); -} - -bool Stream::CanRead() { -  CheckClosed(); -  return DoCanRead(); -} - -Index Stream::Read(std::byte* buffer, Index offset, Index size) { -  CheckClosed(); -  StreamOperationNotSupportedException::CheckRead(DoCanRead()); -  return DoRead(buffer, offset, size); -} - -Index Stream::Read(std::byte* buffer, Index size) { -  return Read(buffer, 0, size); -} - -Index Stream::Read(char* buffer, Index offset, Index size) { -  return Read(reinterpret_cast<std::byte*>(buffer), offset, size); -} - -Index Stream::Read(char* buffer, Index size) { -  return Read(reinterpret_cast<std::byte*>(buffer), 0, size); -} - -bool Stream::CanWrite() { -  CheckClosed(); -  return DoCanWrite(); -} - -Index Stream::Write(const std::byte* buffer, Index offset, Index size) { -  CheckClosed(); -  StreamOperationNotSupportedException::CheckWrite(DoCanWrite()); -  return DoWrite(buffer, offset, size); -} - -Index Stream::Write(const std::byte* buffer, Index size) { -  return Write(buffer, 0, size); -} - -Index Stream::Write(const char* buffer, Index offset, Index size) { -  return Write(reinterpret_cast<const std::byte*>(buffer), offset, size); -} - -Index Stream::Write(const char* buffer, Index size) { -  return Write(reinterpret_cast<const std::byte*>(buffer), size); -} - -void Stream::Flush() { -  CheckClosed(); -  DoFlush(); -} - -bool Stream::DoCanSeek() { -  if (supported_operations_->can_seek) { -    return *supported_operations_->can_seek; -  } else { -    throw Exception( -        u"Can seek is neither set in supported_operations nor implemeted in " -        u"virtual function."); -  } -} - -bool Stream::DoCanRead() { -  if (supported_operations_->can_read) { -    return *supported_operations_->can_read; -  } else { -    throw Exception( -        u"Can read is neither set in supported_operations nor implemeted in " -        u"virtual function."); -  } -} - -bool Stream::DoCanWrite() { -  if (supported_operations_->can_write) { -    return *supported_operations_->can_write; -  } else { -    throw Exception( -        u"Can write is neither set in supported_operations nor implemeted in " -        u"virtual function."); -  } -} - -Index Stream::DoSeek(Index offset, SeekOrigin origin) { -  throw Exception(u"Stream is seekable but DoSeek is not implemented."); -} - -Index Stream::DoTell() { -  StreamOperationNotSupportedException::CheckSeek(DoCanSeek()); -  return DoSeek(0, SeekOrigin::Current); -} - -void Stream::DoRewind() { -  StreamOperationNotSupportedException::CheckSeek(DoCanSeek()); -  DoSeek(0, SeekOrigin::Begin); -} - -Index Stream::DoGetSize() { -  StreamOperationNotSupportedException::CheckSeek(DoCanSeek()); -  Index current_position = DoTell(); -  Seek(0, SeekOrigin::End); -  Index size = DoTell(); -  Seek(current_position, SeekOrigin::Begin); -  return size; -} - -Index Stream::DoRead(std::byte* buffer, Index offset, Index size) { -  throw Exception(u"Stream is readable but DoSeek is not implemented."); -} - -Index Stream::DoWrite(const std::byte* buffer, Index offset, Index size) { -  throw Exception(u"Stream is writable but DoSeek is not implemented."); -} - -void Stream::DoFlush() {} - -Buffer Stream::ReadToEnd(Index grow_size) { -  Buffer buffer(grow_size); -  while (true) { -    auto read = Read(buffer.GetUsedEndPtr(), buffer.GetBackFree()); -    buffer.PushBackCount(read); -    if (read == 0) { -      break; -    } -    if (buffer.IsUsedReachEnd()) { -      buffer.ResizeBuffer(buffer.GetBufferSize() + grow_size, true); -    } -  } -  return buffer; -} - -String Stream::ReadToEndAsUtf8String() { -  auto buffer = ReadToEnd(); -  return String::FromUtf8(buffer); -} -}  // namespace cru::io  | 
