1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
// SPDX-License-Identifier: LGPL-3.0-or-later
// Author: Kristian Lytje
#include <data/state/StateManager.h>
#include <data/state/BoundSignaller.h>
#include <cassert>
using namespace ausaxs;
using namespace ausaxs::state;
StateManager::StateManager(std::size_t size)
: _size(size), _externally_modified(size, true), _internally_modified(size, true),
_symmetry_modified(size, std::vector<bool>()), _modified_hydration(true)
{
for (unsigned int i = 0; i < size; ++i) {
probes.emplace_back(std::make_shared<signaller::BoundSignaller>(i, this));
}
}
void StateManager::externally_modified_all() {
_externally_modified = std::vector<bool>(size(), true);
}
void StateManager::internally_modified_all() {
_internally_modified = std::vector<bool>(size(), true);
}
void StateManager::externally_modified(int i) {
assert(i < static_cast<int>(size()) && "StateManager::externally_modified: index out of range");
_externally_modified[i] = true;
}
void StateManager::internally_modified(int i) {
assert(i < static_cast<int>(size()) && "StateManager::internally_modified: index out of range");
_internally_modified[i] = true;
}
void StateManager::modified_hydration_layer() {
_modified_hydration = true;
}
void StateManager::modified_symmetry(int i, int j) {
assert(i < static_cast<int>(size()) && "StateManager::modified_symmetry: index out of range");
assert(j < static_cast<int>(_symmetry_modified[i].size()) && "StateManager::modified_symmetry: index out of range");
_symmetry_modified[i][j] = true;
}
void StateManager::reset_to_false() {
_internally_modified = std::vector<bool>(size(), false);
_externally_modified = std::vector<bool>(size(), false);
_modified_hydration = false;
for (auto& v : _symmetry_modified) {v = std::vector<bool>(v.size(), false);}
}
void StateManager::set_probe(int i, std::shared_ptr<signaller::Signaller> probe) {
assert(i < static_cast<int>(probes.size()) && "StateManager::set_probe: index out of range");
probes[i] = std::move(probe);
}
std::shared_ptr<signaller::Signaller> StateManager::get_probe(int i) {
assert(i < static_cast<int>(probes.size()) && "StateManager::get_probe: index out of range");
return probes[i];
}
std::vector<std::shared_ptr<signaller::Signaller>> StateManager::get_probes() {return probes;}
const std::vector<bool>& StateManager::get_externally_modified_bodies() const {return _externally_modified;}
std::vector<bool>& StateManager::get_externally_modified_bodies() {return _externally_modified;}
const std::vector<bool>& StateManager::get_internally_modified_bodies() const {return _internally_modified;}
std::vector<bool>& StateManager::get_internally_modified_bodies() {return _internally_modified;}
const std::vector<std::vector<bool>>& StateManager::get_symmetry_modified_bodies() const {return _symmetry_modified;}
std::vector<std::vector<bool>>& StateManager::get_symmetry_modified_bodies() {return _symmetry_modified;}
bool StateManager::is_externally_modified(int i) const {return _externally_modified[i];}
bool StateManager::is_internally_modified(int i) const {return _internally_modified[i];}
bool StateManager::is_modified_symmetry(int i, int j) const {return _symmetry_modified[i][j];}
bool StateManager::is_modified_hydration() const {return _modified_hydration;}
std::size_t StateManager::size() const {return _size;}
|