1 #ifndef SIMGRID_MC_CHUNKED_DATA_HPP
2 #define SIMGRID_MC_CHUNKED_DATA_HPP
9 #include <mc/mc_forward.hpp>
10 #include <mc/AddressSpace.hpp>
11 #include <mc/PageStore.hpp>
18 std::vector<std::size_t> pagenos_;
20 ChunkedData() : store_(nullptr) {}
21 ChunkedData(ChunkedData const& that)
24 pagenos_ = that.pagenos_;
25 for (std::size_t pageno : pagenos_)
26 store_->ref_page(pageno);
30 for (std::size_t pageno : pagenos_)
31 store_->unref_page(pageno);
39 ChunkedData(ChunkedData&& that)
42 that.store_ = nullptr;
43 pagenos_ = std::move(that.pagenos_);
44 that.pagenos_.clear();
46 ChunkedData& operator=(ChunkedData const& that)
50 pagenos_ = that.pagenos_;
51 for (std::size_t pageno : pagenos_)
52 store_->ref_page(pageno);
55 ChunkedData& operator=(ChunkedData && that)
59 that.store_ = nullptr;
60 pagenos_ = std::move(that.pagenos_);
61 that.pagenos_.clear();
65 std::size_t page_count() const { return pagenos_.size(); }
66 std::size_t pageno(std::size_t i) const { return pagenos_[i]; }
67 const std::size_t* pagenos() const { return pagenos_.data(); }
68 std::size_t* pagenos() { return pagenos_.data(); }
70 const void* page(std::size_t i) const
72 return store_->get_page(pagenos_[i]);
75 ChunkedData(PageStore& store, AddressSpace& as,
76 remote_ptr<void> addr, std::size_t page_count,
77 const std::size_t* ref_page_numbers, const std::uint64_t* pagemap);