map_interval.cpp 930 B

123456789101112131415161718192021222324252627282930313233
  1. // Copyright 2020 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <algorithm>
  5. #include <array>
  6. #include <cstddef>
  7. #include <memory>
  8. #include "video_core/buffer_cache/map_interval.h"
  9. namespace VideoCommon {
  10. MapIntervalAllocator::MapIntervalAllocator() {
  11. FillFreeList(first_chunk);
  12. }
  13. MapIntervalAllocator::~MapIntervalAllocator() = default;
  14. void MapIntervalAllocator::AllocateNewChunk() {
  15. *new_chunk = std::make_unique<Chunk>();
  16. FillFreeList(**new_chunk);
  17. new_chunk = &(*new_chunk)->next;
  18. }
  19. void MapIntervalAllocator::FillFreeList(Chunk& chunk) {
  20. const std::size_t old_size = free_list.size();
  21. free_list.resize(old_size + chunk.data.size());
  22. std::transform(chunk.data.rbegin(), chunk.data.rend(), free_list.begin() + old_size,
  23. [](MapInterval& interval) { return &interval; });
  24. }
  25. } // namespace VideoCommon