ModuleBase.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #include "ModuleBase.h"
  2. #include <algorithm>
  3. namespace mdd {
  4. size_t ModuleBase::getNumInputs(){
  5. return inputs.size();
  6. }
  7. size_t ModuleBase::getNumOutputs() {
  8. return outputs.size();
  9. }
  10. std::shared_ptr<IInput> ModuleBase::getInput(size_t index) {
  11. if (index <= inputs.size())
  12. {
  13. return inputs[index];
  14. }
  15. return nullptr;
  16. }
  17. std::shared_ptr<IInput> ModuleBase::getInput(const std::string& input_id){
  18. for(auto& input : inputs){
  19. if (input->getID() == input_id) {
  20. return input;
  21. }
  22. }
  23. return nullptr;
  24. }
  25. std::shared_ptr<IOutput> ModuleBase::getOutput(size_t index) {
  26. if (index <= outputs.size())
  27. {
  28. return outputs[index];
  29. }
  30. return nullptr;
  31. }
  32. std::shared_ptr<IOutput> ModuleBase::getOutput(const std::string& output_id) {
  33. for (auto& output : outputs) {
  34. if (output->getID() == output_id) {
  35. return output;
  36. }
  37. }
  38. return nullptr;
  39. }
  40. std::vector<std::shared_ptr<IInput>> ModuleBase::getOptimizableInputs() {
  41. std::vector<std::shared_ptr<IInput>> ret;
  42. for (size_t i = 0; i < inputs.size(); i++)
  43. {
  44. if (inputs[i]->isOptimizable())
  45. {
  46. ret.push_back(inputs[i]);
  47. }
  48. }
  49. return ret;
  50. }
  51. std::vector<std::shared_ptr<IOutput>> ModuleBase::getOptimizableOutputs() {
  52. std::vector<std::shared_ptr<IOutput>> ret;
  53. for (size_t i = 0; i < outputs.size(); i++)
  54. {
  55. if (outputs[i]->isOptimizable())
  56. {
  57. ret.push_back(outputs[i]);
  58. }
  59. }
  60. return ret;
  61. }
  62. ModuleBase::ModuleBase(const std::string& base_config)
  63. {
  64. json jparse = json::parse(base_config);
  65. if (jparse.contains("configure"))
  66. {
  67. _base_config = base_config;
  68. }
  69. else {
  70. json jconfig;
  71. jconfig["configure"] = jparse;
  72. _base_config = jconfig.dump();
  73. }
  74. }
  75. bool ModuleBase::configure(const std::string& config) {
  76. json j = json::parse(config);
  77. json jbase = json::parse(_base_config);
  78. if (j.contains("GUI"))
  79. {
  80. jbase["GUI"] = j["GUI"];
  81. }
  82. _base_config = jbase.dump();
  83. return true;
  84. }
  85. std::string ModuleBase::getConfiguration()
  86. {
  87. return _base_config;
  88. }
  89. std::string ModuleBase::getType() {
  90. return type;
  91. }
  92. std::string ModuleBase::getGeneratorKey() {
  93. return key;
  94. }
  95. std::string ModuleBase::setName(const std::string& name) {
  96. _name = name;
  97. return getID();
  98. }
  99. std::string ModuleBase::getName() {
  100. return _name;
  101. }
  102. std::string ModuleBase::setAppendix(int appendix) {
  103. _appendix = appendix;
  104. return getID();
  105. }
  106. int ModuleBase::getAppendix() {
  107. return _appendix;
  108. }
  109. std::string ModuleBase::getID() {
  110. return _name + std::to_string(_appendix);
  111. }
  112. void ModuleBase::load(const json& j)
  113. {
  114. if (j.contains("configure"))
  115. {
  116. configure(j["configure"].get<std::string>());
  117. }
  118. }
  119. json ModuleBase::dump()
  120. {
  121. json ret = getIdentifier();
  122. json jconfig = json::parse(_base_config);
  123. if (jconfig.contains("configure"))
  124. {
  125. ret["configure"] = jconfig["configure"];
  126. }
  127. if (jconfig.contains("GUI"))
  128. {
  129. ret["GUI"] = jconfig["GUI"];
  130. }
  131. for (auto& in : inputs)
  132. {
  133. ret["inputs"].push_back(in->dump());
  134. }
  135. for (auto& out : outputs)
  136. {
  137. ret["outputs"].push_back(out->dump());
  138. }
  139. return ret;
  140. }
  141. void ModuleBase::disconnect() {
  142. for (size_t i = 0; i < inputs.size(); i++)
  143. {
  144. inputs[i]->disconnect();
  145. }
  146. for (size_t i = 0; i < outputs.size(); i++)
  147. {
  148. outputs[i]->disconnect();
  149. }
  150. }
  151. json ModuleBase::getIdentifier() {
  152. json jID;
  153. jID["name"] = _name;
  154. jID["id"] = getAppendix();
  155. jID["type"] = type;
  156. jID["key"] = key;
  157. jID["prefix"] = std::vector<std::string>();
  158. return jID;
  159. }
  160. }