void preCheckpointRestore();
/** Check if the system is drained */
- bool isDrained() { return _state == DrainState::Drained; }
+ bool isDrained() const { return _state == DrainState::Drained; }
/** Get the simulators global drain state */
- DrainState state() { return _state; }
+ DrainState state() const { return _state; }
/**
* Notify the DrainManager that a Drainable object has finished
*
* <li>Serialize objects, switch CPU model, or change timing model.
*
- * <li>Call DrainManager::resume(), which intern calls
- * Drainable::drainResume() for all objects, and continue the
+ * <li>Call DrainManager::resume(), which in turn calls
+ * Drainable::drainResume() for all objects, and then continue the
* simulation.
* </ol>
*
virtual ~Drainable();
/**
- * Determine if an object needs draining and register a
- * DrainManager.
+ * Notify an object that it needs to drain its state.
*
* If the object does not need further simulation to drain
- * internal buffers, it returns true and automatically switches to
- * the Drained state, otherwise it switches to the Draining state.
+ * internal buffers, it returns DrainState::Drained and
+ * automatically switches to the Drained state. If the object
+ * needs more simulation, it returns DrainState::Draining and
+ * automatically enters the Draining state. Other return values
+ * are invalid.
*
* @note An object that has entered the Drained state can be
- * disturbed by other objects in the system and consequently be
- * being drained. These perturbations are not visible in the
- * drain state. The simulator therefore repeats the draining
- * process until all objects return DrainState::Drained on the
- * first call to drain().
+ * disturbed by other objects in the system and consequently stop
+ * being drained. These perturbations are not visible in the drain
+ * state. The simulator therefore repeats the draining process
+ * until all objects return DrainState::Drained on the first call
+ * to drain().
*
- * @return DrainState::Drained if the object is ready for
- * serialization now, DrainState::Draining if it needs further
+ * @return DrainState::Drained if the object is drained at this
+ * point in time, DrainState::Draining if it needs further
* simulation.
*/
virtual DrainState drain() = 0;