#ifndef DATAPROTOTYPE_H #define DATAPROTOTYPE_H #include #include class RuntimeItem; /** * @brief 实体观察接口 */ class ItemListener{ public: virtual ~ItemListener() = default; virtual void itemHasbeenUpdated(std::shared_ptr current, std::shared_ptr previous) = 0; virtual void memberHasbeenAppended(const RuntimeItem &parent, std::shared_ptr inst) = 0; virtual void memberAboutToBeRemove(const RuntimeItem &parent, std::shared_ptr inst) = 0; virtual void memberHasbeenReplaced(const RuntimeItem &parent, std::shared_ptr current, std::shared_ptr previous) = 0; }; /** * @brief 聚合体类型 */ enum class AssembleType { DATAS_ASSEMBLE, // 数据聚合体 MODULES_UNIT, // 模块单元 }; /** * @brief 内存实例接口 */ class RuntimeItem : public std::enable_shared_from_this { public: explicit RuntimeItem(AssembleType t); explicit RuntimeItem(const RuntimeItem & other); std::shared_ptr add(std::shared_ptr inst) const; std::shared_ptr del(std::shared_ptr inst) const; void itemNotify(std::function)> proc) const; AssembleType baseType() const; virtual qulonglong hashCode() const; virtual std::shared_ptr clone() const; private: AssembleType type_store; QList> listener_collection; }; /** * @brief 下行实体访问接口 */ class DownAccess : public std::enable_shared_from_this{ public: explicit DownAccess(std::shared_ptr peer); explicit DownAccess(const DownAccess &other); template std::shared_ptr typePeer() const { return std::dynamic_pointer_cast(itemPeer()); } std::shared_ptr itemPeer() const; QList> members() const; std::shared_ptr append(std::shared_ptr child_inst) const; std::shared_ptr remove(std::shared_ptr child_inst) const; std::shared_ptr replace(std::shared_ptr current, std::shared_ptr previous) const; virtual std::shared_ptr clone() const; private: std::shared_ptr runtime_item; QList> children_store; }; /** * @brief 上行访问接口 */ class UpAccess : public std::enable_shared_from_this { public: explicit UpAccess(std::shared_ptr parent, std::shared_ptr down); explicit UpAccess(const UpAccess &other); template std::shared_ptr typePeer() const { return std::dynamic_pointer_cast(itemPeer()); } std::shared_ptr downwardPeers() const; std::shared_ptr parent() const; virtual std::shared_ptr clone() const; private: std::shared_ptr runtime_downward; std::shared_ptr parent_ptr; }; /** * @brief 定义数据传输方向 */ enum class DataOritation { INPUT, // 引入 OUTPUT, // 输出 CONSUME, // 引入消耗 GENERATE, // 引出生成 UNDEFINED, // 未定义 }; /** * @brief 数据接口 */ class TypeTemplate : public RuntimeItem { private: QString name_store = "foo"; QString type_store = "整形"; DataOritation io_type = DataOritation::UNDEFINED; QHash, QString>> comps_store; public: explicit TypeTemplate(); explicit TypeTemplate(const TypeTemplate & other); QString name() const; std::shared_ptr setName(const QString &val) const; QString type() const; std::shared_ptr setType(const QString &val) const; DataOritation oritation() const; std::shared_ptr setOritation(DataOritation t) const; virtual std::shared_ptr clone() const; }; #endif // DATAPROTOTYPE_H