#ifndef BLOCKSTORE_H #define BLOCKSTORE_H #include #include #include #include "block.h" #include "blockborder.h" #include "microcontroller.h" #include "itemstore.h" class Layout : public QObject { Q_OBJECT private: private: std::vector> blocks_; std::vector> borders_; std::vector, std::weak_ptr>> trainLimbo_; void removeTrainFromAllBlocks(std::shared_ptr train); void registerTrainInLimbo(std::shared_ptr train, std::shared_ptr); public: explicit Layout(QObject *parent = nullptr); void addBlock(std::shared_ptr block); void addBorder(std::shared_ptr border); void store(QJsonObject& json); void load(const QJsonObject& json); std::shared_ptr getBorder(uint32_t id); std::shared_ptr getBlock(uint32_t id); public slots: void trainArrivedAtReader(uint8_t reader, std::shared_ptr train, int tagType); void itemAdded(std::weak_ptr item); signals: void trainArrivedAtBorder(std::weak_ptr, std::weak_ptr train, int tagType); }; #endif // BLOCKSTORE_H