DiskDevice.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "DiskDevice.h"
  2. DiskDevice::DiskDevice()
  3. {
  4. }
  5. DiskDevice::~DiskDevice()
  6. {
  7. }
  8. bool DiskDevice::read(DiskOffset offset, unsigned length, byte* out) const
  9. {
  10. ASSERT((offset % blockSize()) == 0);
  11. ASSERT((length % blockSize()) == 0);
  12. dword firstBlock = offset / blockSize();
  13. dword endBlock = (offset + length) / blockSize();
  14. byte* outptr = out;
  15. for (unsigned bi = firstBlock; bi < endBlock; ++bi) {
  16. if (!readBlock(bi, outptr))
  17. return false;
  18. outptr += blockSize();
  19. }
  20. return true;
  21. }
  22. bool DiskDevice::write(DiskOffset offset, unsigned length, const byte* in)
  23. {
  24. ASSERT((offset % blockSize()) == 0);
  25. ASSERT((length % blockSize()) == 0);
  26. dword firstBlock = offset / blockSize();
  27. dword endBlock = (offset + length) / blockSize();
  28. ASSERT(firstBlock <= 0xffffffff);
  29. ASSERT(endBlock <= 0xffffffff);
  30. const byte* inptr = in;
  31. for (unsigned bi = firstBlock; bi < endBlock; ++bi) {
  32. if (!writeBlock(bi, inptr))
  33. return false;
  34. inptr += blockSize();
  35. }
  36. return true;
  37. }