/* This file is part of MAUS: http://micewww.pp.rl.ac.uk/projects/maus * * MAUS 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. * * MAUS 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 MAUS. If not, see . * */ #ifndef _SRC_COMMON_CPP_UTILS_RUNACTIONMANAGER_HH_ #define _SRC_COMMON_CPP_UTILS_RUNACTIONMANAGER_HH_ #include namespace MAUS { class RunActionBase; class RunHeader; class RunFooter; /** @class RunActionManager is responsible for objects that need to be * updated every data run. * * RunActionManager maintains a list of objects (RunActions) that need * to be updated every run (interface class is RunActionBase). Get/Set * methods are provided for some specific items. * * RunActionManager has two functions - StartOfRun calls each of the * RunActionBase StartOfRun methods in turn, while EndOfRun calls * each of the RunActionBase EndOfRun methods in turn. * * The only communication between worker nodes in MAUS is the Spill, so MAUS * calls EndOfRun then StartOfRun when it detects a change in the spill * number. An additional call to EndOfRun is made before exiting. */ class RunActionManager { public: /** Initialises everything to NULL */ RunActionManager(); /** Deletes all RunActionBase objects in the run_data vector (should be * everything then) */ ~RunActionManager(); /** Calls the StartOfRun method on each of the RunActions * * StartOfRun methods are called in the order items are loaded into the * _run_actions vector. */ void StartOfRun(RunHeader* run_header); /** Calls the EndOfRun method on each of the RunActions. * * EndOfRun methods are called in the order items are loaded into the * _run_actions vector. */ void EndOfRun(RunFooter* run_footer); /** Replace current_item with new_item in run_data vector. * * If current_item is not in the run_data vector, throw a * Exception. If new_item is already in the run_data vector or is NULL, throw * a Exception. * * Memory allocated to current_item is still allocated, but no longer owned * by RunActionManager (i.e. now owned by caller). */ void Swap(RunActionBase* current_item, RunActionBase* new_item); /** Add item to the RunActionManager * * RunActionManager now owns this memory (will clean it on delete). Throw * a Exception if item is already in the run_actions or item is NULL. */ void PushBack(RunActionBase* item); private: std::vector _run_actions; RunActionManager(const RunActionManager& run); RunActionManager& operator=(const RunActionManager& run); }; } // namespace MAUS #endif // #ifndef _SRC_COMMON_CPP_UTILS_RUNACTIONMANAGER_HH_