/**
* @file tests/pdevs/graph_manager.cpp
* @author The ARTIS Development Team
* See the AUTHORS or Authors.txt file
*/
/*
* ARTIS - the multimodeling and simulation environment
* This file is a part of the ARTIS environment
*
* Copyright (C) 2013-2019 ULCO http://www.univ-littoral.fr
*
* 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 .
*/
#ifndef TESTS_PDEVS_GRAPH_MANAGER_HPP
#define TESTS_PDEVS_GRAPH_MANAGER_HPP
#include
#include
#include
#include
namespace artis {
namespace tests {
namespace pdevs {
class S1GraphManager : public artis::pdevs::GraphManager
{
public:
enum submodels
{
OneA, OneB
};
enum outputs
{
OUT
};
S1GraphManager(common::Coordinator *coordinator,
const artis::common::NoParameters ¶meters,
const artis::common::NoParameters &graph_parameters)
:
artis::pdevs::GraphManager(coordinator, parameters, graph_parameters),
a("a1", parameters), b("b1", parameters)
{
add_child(OneA, &a);
add_child(OneB, &b);
coordinator->output_port({OUT, "out"});
out({&a, A::OUT}) >> in({&b, B::IN});
out({&b, B::OUT}) >> out({coordinator, OUT});
}
~S1GraphManager() override = default;
private:
artis::pdevs::Simulator a;
artis::pdevs::Simulator b;
};
class S2GraphManager : public artis::pdevs::GraphManager
{
public:
enum submodels
{
OneA, OneB
};
enum inputs
{
IN
};
S2GraphManager(common::Coordinator *coordinator,
const artis::common::NoParameters ¶meters,
const artis::common::NoParameters &graph_parameters)
:
artis::pdevs::GraphManager(coordinator, parameters, graph_parameters),
a("a2", parameters), b("b2", parameters)
{
add_child(OneA, &a);
add_child(OneB, &b);
coordinator->input_port({IN, "in"});
in({coordinator, IN}) >> in({&a, A::IN});
out({&a, A::OUT}) >> in({&b, B::IN});
}
~S2GraphManager() override = default;
private:
artis::pdevs::Simulator a;
artis::pdevs::Simulator b;
};
class RootGraphManager :
public artis::pdevs::GraphManager
{
public:
enum submodels
{
OneS1, OneS2
};
RootGraphManager(
common::Coordinator *coordinator,
const artis::common::NoParameters ¶meters,
const artis::common::NoParameters &graph_parameters)
:
artis::pdevs::GraphManager(coordinator, parameters, graph_parameters),
S1("S1", parameters, graph_parameters),
S2("S2", parameters, graph_parameters)
{
add_child(OneS1, &S1);
add_child(OneS2, &S2);
out({&S1, S1GraphManager::OUT}) >> in({&S2, S2GraphManager::IN});
}
~RootGraphManager() override = default;
private:
artis::pdevs::Coordinator S1;
artis::pdevs::Coordinator S2;
};
template
class OnlyOneGraphManager :
public artis::pdevs::GraphManager
{
public:
enum submodels
{
OneM
};
OnlyOneGraphManager(common::Coordinator *coordinator,
const artis::common::NoParameters ¶meters,
const artis::common::NoParameters &graph_parameters)
:
artis::pdevs::GraphManager(coordinator, parameters, graph_parameters),
model("a", parameters)
{
add_child(OneM, &model);
}
~OnlyOneGraphManager() override = default;
private:
artis::pdevs::Simulator model;
};
class FlatGraphManager :
public artis::pdevs::GraphManager
{
public:
enum submodels
{
FirstA, SecondA,
FirstB, SecondB
};
FlatGraphManager(common::Coordinator *coordinator,
const artis::common::NoParameters ¶meters,
const artis::common::NoParameters &graph_parameters)
:
artis::pdevs::GraphManager(coordinator, parameters, graph_parameters),
a1("a1", parameters), b1("b1", parameters),
a2("a2", parameters), b2("b2", parameters)
{
add_child(FirstA, &a1);
add_child(FirstB, &b1);
add_child(SecondA, &a2);
add_child(SecondB, &b2);
out({&a1, A::OUT}) >> in({&b1, B::IN});
out({&b1, B::OUT}) >> in({&a2, A::IN});
out({&a2, A::OUT}) >> in({&b2, B::IN});
}
~FlatGraphManager() override = default;
private:
artis::pdevs::Simulator a1;
artis::pdevs::Simulator b1;
artis::pdevs::Simulator a2;
artis::pdevs::Simulator b2;
};
}
}
} // namespace artis tests pdevs
#endif