Sink, WIP

This commit is contained in:
2025-10-06 15:27:00 +02:00
parent 8670376f1f
commit 2bd5e7ce90
16 changed files with 28955 additions and 28878 deletions

View File

@@ -26,24 +26,51 @@
#include "Sink.hpp"
namespace artis::factory {
namespace artis::factory { // TODO : Peut être qu'il manque du code dans cette classe. Pour le moment, le test tourne à l'infini. Trouver où ça coince et ce qu'il manque
void Sink::dint(const Time & /* t */) {
void Sink::dint(const Time &/*t*/) {
// TODO
// Inutile si l'on consiède que cet élément ce fait que recevoir des POs. Il ne fait rien par lui-même, et ne varie que en fonction de son environnement.
}
void Sink::dext(const Time & /* t */, const Time & /* e */, const Bag &bag) {
std::for_each(bag.begin(), bag.end(), [](const ExternalEvent & /* event */) {
// TODO
void Sink::dext(const Time &t, const Time & /* e */, const Bag &bag) {
std::for_each(bag.begin(), bag.end(), [this, t](const ExternalEvent &event) {
if (event.port_index() == inputs::IN) {
uint8_t *data = nullptr;
event.data()(data);
std::unique_ptr<ProductionOrder> po = std::make_unique<ProductionOrder>(data, event.data().size());
#ifdef WITH_TRACE
Trace::trace()
<< TraceElement(get_name(), t,
artis::common::FormalismType::PDEVS,
artis::common::FunctionType::DELTA_EXT,
artis::common::LevelType::USER)
<< "Sink received po = " << po->to_string();
Trace::trace().flush();
#endif
_pos.push_back(std::move(po));//Je ne peux pas dupliquer ce pointer unique dans la liste, je dois explicitement le déplacer.
_phase = Phase::LOADED;
}
});
}
void Sink::start(const Time & /* t */) {
// TODO
_phase = Phase::INIT;
}
Time Sink::ta(const Time & /* t */) const {
// TODO
switch (_phase) {
case Phase::INIT:// Phase transitoire, je n'y reste pas, le modèle ne fait qu'y passer
case Phase::READY:// Idem
//case Phase::UNLOADING:// Déchargement des PO dans la sortie, ce n'est que transitoire
return 0;
case Phase::WAIT:// J'attends un premier PO, potentiellement infini
case Phase::LOADED:// J'ai un PO en stock, j'attends d'en faire quelque chose,ce qui est potentiellement infini
return artis::common::DoubleTime::infinity;
}
return artis::common::DoubleTime::infinity;
}
@@ -51,6 +78,7 @@ Bag Sink::lambda(const Time & /* t */) const {
Bag bag;
// TODO
// Pour le moment, Sink ne laisse pas sortir les POs arrivés dedans. Inutile de définir ceci.
return bag;
}
@@ -58,4 +86,4 @@ artis::common::event::Value Sink::observe(const Time & /* t */, unsigned int /*
return {};
}
} // namespace artis::factory
} // namespace artis::factory