Program Listing for File PageDescriptor.cpp¶
↰ Return to documentation for file (umap/PageDescriptor.cpp)
//////////////////////////////////////////////////////////////////////////////
// Copyright 2017-2020 Lawrence Livermore National Security, LLC and other
// UMAP Project Developers. See the top-level LICENSE file for details.
//
// SPDX-License-Identifier: LGPL-2.1-only
//////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include "umap/PageDescriptor.hpp"
#include "umap/RegionDescriptor.hpp"
#include "umap/util/Macros.hpp"
namespace Umap {
std::string PageDescriptor::print_state( void ) const {
switch (state) {
default: return "???";
case Umap::PageDescriptor::State::FREE: return "FREE";
case Umap::PageDescriptor::State::FILLING: return "FILLING";
case Umap::PageDescriptor::State::PRESENT: return "PRESENT";
case Umap::PageDescriptor::State::UPDATING: return "UPDATING";
case Umap::PageDescriptor::State::LEAVING: return "LEAVING";
}
}
void PageDescriptor::set_state_free( void ) {
if ( state != LEAVING )
UMAP_ERROR("Invalid state transition from: " << print_state());
state = FREE;
}
void PageDescriptor::set_state_filling( void ) {
if ( state != FREE )
UMAP_ERROR("Invalid state transition from: " << print_state());
state = FILLING;
}
void PageDescriptor::set_state_present( void ) {
if ( state != FILLING && state != UPDATING )
UMAP_ERROR("Invalid state transition from: " << print_state());
state = PRESENT;
}
void PageDescriptor::set_state_updating( void ) {
if ( state != PRESENT )
UMAP_ERROR("Invalid state transition from: " << print_state());
state = UPDATING;
}
void PageDescriptor::set_state_leaving( void ) {
if ( state != PRESENT )
UMAP_ERROR("Invalid state transition from: " << print_state());
state = LEAVING;
}
std::ostream& operator<<(std::ostream& os, const Umap::PageDescriptor* pd)
{
if (pd != nullptr) {
os << "{ "
<< (void*)(pd->page)
<< ", " << pd->print_state();
if ( pd->dirty )
os << ", DIRTY";
if ( pd->deferred )
os << ", DEFERRED";
if ( pd->spurious_count )
os << ", spurious: " << pd->spurious_count;
os << " }";
}
else {
os << "{ nullptr }";
}
return os;
}
std::ostream& operator<<(std::ostream& os, const Umap::PageDescriptor::State st)
{
switch (st) {
default: os << "???"; break;
case Umap::PageDescriptor::State::FREE: os << "FREE"; break;
case Umap::PageDescriptor::State::FILLING: os << "FILLING"; break;
case Umap::PageDescriptor::State::PRESENT: os << "PRESENT"; break;
case Umap::PageDescriptor::State::UPDATING: os << "UPDATING"; break;
case Umap::PageDescriptor::State::LEAVING: os << "LEAVING"; break;
}
return os;
}
} // end of namespace Umap