EmptyPatch.cc 916 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "EmptyPatch.hh"
  2. #include <cstring>
  3. #include <cassert>
  4. namespace openmsx {
  5. EmptyPatch::EmptyPatch(const byte* block_, size_t size_)
  6. : block(block_), size(size_)
  7. {
  8. }
  9. void EmptyPatch::copyBlock(size_t src, byte* dst, size_t num) const
  10. {
  11. if ((src + num) > size) {
  12. // past end
  13. if (size <= src) {
  14. // start past size, only fill block
  15. memset(dst, 0, num);
  16. } else {
  17. auto part1 = size - src;
  18. auto part2 = num - part1;
  19. assert(dst != (block + src));
  20. memcpy(dst, &block[src], part1);
  21. memset(dst + part1, 0, part2);
  22. }
  23. } else {
  24. if (dst != (block + src)) {
  25. // memcpy cannot handle overlapping regions, but in
  26. // that case we don't need to copy at all
  27. memcpy(dst, &block[src], num);
  28. }
  29. }
  30. }
  31. size_t EmptyPatch::getSize() const
  32. {
  33. return size;
  34. }
  35. std::vector<Filename> EmptyPatch::getFilenames() const
  36. {
  37. // return {};
  38. return std::vector<Filename>();
  39. }
  40. } // namespace openmsx