Subversion Repositories public iLand

Rev

Rev 1221 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/********************************************************************************************
**    iLand - an individual based forest landscape and disturbance model
**    http://iland.boku.ac.at
**    Copyright (C) 2009-  Werner Rammer, Rupert Seidl
**
**    This program 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.
**
**    This program 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/>.
********************************************************************************************/


#ifndef MODULES_H
#define MODULES_H

class DisturbanceInterface; // forward
class SetupResourceUnitInterface; // forward
class WaterInterface; // forward
class TreeDeathInterface; // forward
class ResourceUnit; // forward
class Tree; // forward
class WaterCycleData; // forward
class QJSEngine; // forward
/** The Modules class is the container for iLand modules (e.g. Fire, Wind, ...).
    It handles loading and invoking the functionality defined in the modules.
*/

class Modules
{
public:
    Modules();

    /// general setup
    void setup();
    /// get interface by name (or 0 if not present)
    DisturbanceInterface *module(const QString &module_name);

    bool hasSetupResourceUnits() { return !mSetupRUs.isEmpty(); }
    // setup of resource unit specific parameters
    void setupResourceUnit(const ResourceUnit* ru);

    // functions
    void yearBegin(); ///< executes yearly initialization code for each module
    void run(); ///< execute the modules
    // water
    void calculateWater(const ResourceUnit *resource_unit, const WaterCycleData *water_data);

    // tree death
    void treeDeath(const Tree *tree, int removal_type);
private:
    void init();
    QList<DisturbanceInterface*> mInterfaces; ///< the list stores only the active modules
    QList<SetupResourceUnitInterface*> mSetupRUs;
    QList<WaterInterface*> mWater;
    QList<TreeDeathInterface*> mTreeDeath;
};

#endif // MODULES_H