Source code for espressomd.actors
# Copyright (C) 2010-2022 The ESPResSo project
#
# This file is part of ESPResSo.
#
# ESPResSo is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ESPResSo is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from . import highlander
from . import script_interface
[docs]class Actors:
"""
Container for actor objects.
"""
active_actors = []
def __del__(self):
self.clear()
def __getstate__(self):
return self.active_actors
def __setstate__(self, active_actors):
self.active_actors[:] = []
for actor in active_actors:
self.active_actors.append(actor)
actor._activate()
[docs] def add(self, actor):
"""
Parameters
----------
actor :
Actor to add to this container.
"""
if actor in Actors.active_actors:
raise highlander.ThereCanOnlyBeOne(actor)
if isinstance(actor, script_interface.ScriptInterfaceHelper):
actor._activate()
self.active_actors.append(actor)
if not isinstance(actor, script_interface.ScriptInterfaceHelper):
actor._activate()
[docs] def remove(self, actor):
"""
Parameters
----------
actor :
Actor to remove from this container.
"""
if actor not in self.active_actors:
raise Exception("Actor is not active")
actor._deactivate()
self.active_actors.remove(actor)
[docs] def clear(self):
"""Remove all actors."""
# The order in which actors are removed matters. Some actors set up
# global bitfields that activate sanity checks on the MD cellsystem,
# and reset these bitfields when removed. Actors need to be removed
# in the reverse order they were inserted to guarantee pre-conditions
# and post-conditions are always met.
while len(self.active_actors):
self.remove(self.active_actors[-1])
def __str__(self):
return str(self.active_actors)
def __getitem__(self, key):
return self.active_actors[key]
def __len__(self):
return len(self.active_actors)
def __iter__(self):
for actor in self.active_actors:
yield actor
def __delitem__(self, idx):
actor = self[idx]
self.remove(actor)