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

@@ -5307,7 +5307,6 @@ src/CMakeFiles/factory_core.dir/Processor.cpp.o
/usr/include/c++/13/initializer_list
/usr/include/c++/13/ios
/usr/include/c++/13/iosfwd
/usr/include/c++/13/iostream
/usr/include/c++/13/istream
/usr/include/c++/13/iterator
/usr/include/c++/13/limits

View File

@@ -5302,7 +5302,6 @@ src/CMakeFiles/factory_core.dir/Processor.cpp.o: src/Processor.cpp \
/usr/include/c++/13/initializer_list \
/usr/include/c++/13/ios \
/usr/include/c++/13/iosfwd \
/usr/include/c++/13/iostream \
/usr/include/c++/13/istream \
/usr/include/c++/13/iterator \
/usr/include/c++/13/limits \
@@ -12735,8 +12734,6 @@ src/ProductionOrder.hpp:
/usr/include/c++/13/tr1/ell_integral.tcc:
/usr/include/c++/13/iostream:
/usr/include/c++/13/bits/hash_bytes.h:
/usr/include/boost/smart_ptr/shared_ptr.hpp:

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

View File

@@ -34,6 +34,7 @@
namespace artis::factory {
struct SinkParameters : MachineParameters {
};
class Sink : public Dynamics<Sink, SinkParameters> {
@@ -76,9 +77,38 @@ public:
artis::common::event::Value observe(const Time &t, unsigned int index) const override;
private:
// TODO (state)
};
struct Phase {
enum values {
INIT,
READY,
WAIT,
LOADED,
//UNLOADING
};
static std::string to_string(const values &value) {
switch (value) {
case INIT:
return "INIT";
case READY:
return "READY";
case WAIT:
return "WAIT";
case LOADED:
return "LOADED";
/*case UNLOADING:
return "UNLOADING";*/
}
return "";
}
};
Phase::values _phase;
std::vector<std::unique_ptr<ProductionOrder>> _pos;
}; // class Sink
} // namespace artis::factory
#endif
#endif // ARTIS_FACTORY_SINK_HPP

Binary file not shown.