graph_manager.hpp 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. /**
  2. * @file tests/qss/graph_manager.cpp
  3. * @author The ARTIS Development Team
  4. * See the AUTHORS or Authors.txt file
  5. */
  6. /*
  7. * ARTIS - the multimodeling and simulation environment
  8. * This file is a part of the ARTIS environment
  9. *
  10. * Copyright (C) 2013-2019 ULCO http://www.univ-littoral.fr
  11. *
  12. * This program is free software: you can redistribute it and/or modify
  13. * it under the terms of the GNU General Public License as published by
  14. * the Free Software Foundation, either version 3 of the License, or
  15. * (at your option) any later version.
  16. *
  17. * This program is distributed in the hope that it will be useful,
  18. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20. * GNU General Public License for more details.
  21. *
  22. * You should have received a copy of the GNU General Public License
  23. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  24. */
  25. #ifndef TESTS_QSS_GRAPH_MANAGER_HPP
  26. #define TESTS_QSS_GRAPH_MANAGER_HPP 1
  27. #include <tests/qss/models.hpp>
  28. #include <artis-star/kernel/pdevs/Coordinator.hpp>
  29. #include <artis-star/kernel/pdevs/qss/GraphManager.hpp>
  30. namespace artis {
  31. namespace tests {
  32. namespace qss {
  33. class ConstantGraphManager :
  34. public artis::pdevs::qss::GraphManager<common::DoubleTime, Constant> {
  35. public:
  36. ConstantGraphManager(common::Coordinator<common::DoubleTime>* coordinator,
  37. const artis::pdevs::qss::QSSParameters<artis::common::NoParameters>& parameters,
  38. const artis::common::NoParameters& graph_parameters)
  39. :
  40. artis::pdevs::qss::GraphManager<common::DoubleTime, Constant>(coordinator,
  41. parameters, graph_parameters) { }
  42. ~ConstantGraphManager() override = default;
  43. };
  44. class OnlyOneGraphManager :
  45. public artis::pdevs::qss::GraphManager<common::DoubleTime, Constant> {
  46. public:
  47. enum submodels {
  48. A
  49. };
  50. OnlyOneGraphManager(common::Coordinator<common::DoubleTime>* coordinator,
  51. const artis::pdevs::qss::QSSParameters<artis::common::NoParameters>& parameters,
  52. const artis::common::NoParameters& graph_parameters)
  53. :
  54. artis::pdevs::qss::GraphManager<common::DoubleTime, Constant>(coordinator,
  55. parameters, graph_parameters),
  56. S("a", parameters, graph_parameters)
  57. {
  58. add_child(A, &S);
  59. }
  60. ~OnlyOneGraphManager() override = default;
  61. private:
  62. artis::pdevs::Coordinator<common::DoubleTime, ConstantGraphManager, artis::pdevs::qss::QSSParameters<artis::common::NoParameters>> S;
  63. };
  64. class ParabolaGraphManager :
  65. public artis::pdevs::qss::GraphManager<common::DoubleTime, Parabola, ParabolaParameters> {
  66. public:
  67. ParabolaGraphManager(common::Coordinator<common::DoubleTime>* coordinator,
  68. const artis::pdevs::qss::QSSParameters<ParabolaParameters>& parameters,
  69. const artis::common::NoParameters& graph_parameters)
  70. :
  71. artis::pdevs::qss::GraphManager<common::DoubleTime, Parabola, ParabolaParameters>(
  72. coordinator, parameters, graph_parameters) { }
  73. ~ParabolaGraphManager() override = default;
  74. };
  75. class OnlyOneParabolaGraphManager :
  76. public artis::pdevs::GraphManager<common::DoubleTime, artis::pdevs::qss::QSSParameters<ParabolaParameters>> {
  77. public:
  78. enum submodels {
  79. A
  80. };
  81. OnlyOneParabolaGraphManager(common::Coordinator<common::DoubleTime>* coordinator,
  82. const artis::pdevs::qss::QSSParameters<ParabolaParameters>& parameters,
  83. const artis::common::NoParameters& graph_parameters)
  84. :
  85. artis::pdevs::GraphManager<common::DoubleTime, artis::pdevs::qss::QSSParameters<ParabolaParameters>>(
  86. coordinator, parameters, graph_parameters),
  87. S("a", parameters, graph_parameters)
  88. {
  89. add_child(A, &S);
  90. }
  91. ~OnlyOneParabolaGraphManager() override = default;
  92. private:
  93. artis::pdevs::Coordinator<common::DoubleTime, ParabolaGraphManager, artis::pdevs::qss::QSSParameters<ParabolaParameters>> S;
  94. };
  95. class PredatorGraphManager :
  96. public artis::pdevs::qss::GraphManager<common::DoubleTime, Predator, PreyPredatorParameters> {
  97. public:
  98. enum inputs {
  99. IN_X
  100. };
  101. PredatorGraphManager(common::Coordinator<common::DoubleTime>* coordinator,
  102. const artis::pdevs::qss::QSSParameters<PreyPredatorParameters>& parameters,
  103. const artis::common::NoParameters& graph_parameters)
  104. :
  105. artis::pdevs::qss::GraphManager<common::DoubleTime, Predator, PreyPredatorParameters>(
  106. coordinator, parameters, graph_parameters) {
  107. coordinator->input_port({IN_X, "in_x"});
  108. in({coordinator, IN_X}) >> in({derivative(), Predator::IN_X});
  109. }
  110. ~PredatorGraphManager() override = default;
  111. };
  112. class PreyGraphManager :
  113. public artis::pdevs::qss::GraphManager<common::DoubleTime, Prey, PreyPredatorParameters> {
  114. public:
  115. enum inputs {
  116. IN_Y
  117. };
  118. PreyGraphManager(common::Coordinator<common::DoubleTime>* coordinator,
  119. const artis::pdevs::qss::QSSParameters<PreyPredatorParameters>& parameters,
  120. const artis::common::NoParameters& graph_parameters)
  121. :
  122. artis::pdevs::qss::GraphManager<common::DoubleTime, Prey, PreyPredatorParameters>(
  123. coordinator, parameters, graph_parameters) {
  124. coordinator->input_port({IN_Y, "in_y"});
  125. in({coordinator, IN_Y}) >> in({derivative(), Prey::IN_Y});
  126. }
  127. ~PreyGraphManager() override = default;
  128. };
  129. struct PreyPredatorGraphManagerParameters {
  130. artis::pdevs::qss::QSSParameters<PreyPredatorParameters> _predator;
  131. artis::pdevs::qss::QSSParameters<PreyPredatorParameters> _prey;
  132. };
  133. class PreyPredatorGraphManager :
  134. public artis::pdevs::GraphManager<common::DoubleTime, PreyPredatorGraphManagerParameters> {
  135. public:
  136. enum submodels {
  137. PREDATOR, PREY
  138. };
  139. PreyPredatorGraphManager(common::Coordinator<common::DoubleTime>* coordinator,
  140. const PreyPredatorGraphManagerParameters& parameters,
  141. const artis::common::NoParameters& graph_parameters)
  142. :
  143. artis::pdevs::GraphManager<common::DoubleTime, PreyPredatorGraphManagerParameters>(
  144. coordinator, parameters, graph_parameters),
  145. _predator("predator", parameters._predator, graph_parameters),
  146. _prey("prey", parameters._prey, graph_parameters)
  147. {
  148. add_child(PREDATOR, &_predator);
  149. add_child(PREY, &_prey);
  150. out({&_predator, PredatorGraphManager::OUT}) >> in({&_prey, PreyGraphManager::IN_Y});
  151. out({&_prey, PreyGraphManager::OUT}) >> in({&_predator, PredatorGraphManager::IN_X});
  152. }
  153. ~PreyPredatorGraphManager() override = default;
  154. private:
  155. artis::pdevs::Coordinator<common::DoubleTime, PredatorGraphManager, artis::pdevs::qss::QSSParameters<PreyPredatorParameters>> _predator;
  156. artis::pdevs::Coordinator<common::DoubleTime, PreyGraphManager, artis::pdevs::qss::QSSParameters<PreyPredatorParameters>> _prey;
  157. };
  158. }
  159. }
  160. } // namespace artis tests qss
  161. #endif