X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fe304706848f0a64477d4687b3ea97d5b9a0c35c..39c935d6d5ee86d153f6f7e6a10d723ae7c57f6f:/src/mc/sosp/PageStore.hpp diff --git a/src/mc/sosp/PageStore.hpp b/src/mc/sosp/PageStore.hpp index c78f57509f..2311e33d12 100644 --- a/src/mc/sosp/PageStore.hpp +++ b/src/mc/sosp/PageStore.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2015-2021. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -23,7 +23,7 @@ namespace mc { /** @brief Storage for snapshot memory pages * * The first (lower) layer of the per-page snapshot mechanism is a page store: - * its responsibility is to store immutable sharable reference-counted memory + * its responsibility is to store immutable shareable reference-counted memory * pages independently of the snapshotting logic. Snapshot management and * representation is handled to an higher layer. READMORE * @@ -73,15 +73,15 @@ namespace mc { */ class PageStore { public: // Types - typedef std::uint64_t hash_type; + using hash_type = std::uint64_t; private: // Types // We are using a cheap hash to index a page. // We should expect collision and we need to associate multiple page indices // to the same hash. - typedef std::unordered_set page_set_type; - typedef std::unordered_map pages_map_type; + using page_set_type = std::unordered_set; + using pages_map_type = std::unordered_map; // Fields: /** First page */ @@ -134,28 +134,28 @@ public: void ref_page(size_t pageno); /** @brief Store a page in the page store */ - std::size_t store_page(void* page); + std::size_t store_page(const void* page); /** @brief Get a page from its page number * * @param pageno Number of the memory page in the store * @return Start of the page */ - const void* get_page(std::size_t pageno) const; + void* get_page(std::size_t pageno) const; // Debug/test methods /** @brief Get the number of references for a page */ - std::size_t get_ref(std::size_t pageno); + std::size_t get_ref(std::size_t pageno) const; /** @brief Get the number of used pages */ - std::size_t size(); + std::size_t size() const; /** @brief Get the capacity of the page store * * The capacity is expanded by a system call (mremap). * */ - std::size_t capacity(); + std::size_t capacity() const; }; XBT_ALWAYS_INLINE void PageStore::unref_page(std::size_t pageno) @@ -169,22 +169,22 @@ XBT_ALWAYS_INLINE void PageStore::ref_page(size_t pageno) ++this->page_counts_[pageno]; } -XBT_ALWAYS_INLINE const void* PageStore::get_page(std::size_t pageno) const +XBT_ALWAYS_INLINE void* PageStore::get_page(std::size_t pageno) const { return (void*)simgrid::mc::mmu::join(pageno, (std::uintptr_t)this->memory_); } -XBT_ALWAYS_INLINE std::size_t PageStore::get_ref(std::size_t pageno) +XBT_ALWAYS_INLINE std::size_t PageStore::get_ref(std::size_t pageno) const { return this->page_counts_[pageno]; } -XBT_ALWAYS_INLINE std::size_t PageStore::size() +XBT_ALWAYS_INLINE std::size_t PageStore::size() const { return this->top_index_ - this->free_pages_.size(); } -XBT_ALWAYS_INLINE std::size_t PageStore::capacity() +XBT_ALWAYS_INLINE std::size_t PageStore::capacity() const { return this->capacity_; }