Sink, WIP
This commit is contained in:
44
src/Sink.cpp
44
src/Sink.cpp
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user