138 lines
4.3 KiB
C++
138 lines
4.3 KiB
C++
#ifndef DATAPROTOTYPE_H
|
|
#define DATAPROTOTYPE_H
|
|
|
|
#include <QString>
|
|
#include <QList>
|
|
|
|
class RuntimeItem;
|
|
|
|
/**
|
|
* @brief 实体观察接口
|
|
*/
|
|
class ItemListener{
|
|
public:
|
|
virtual ~ItemListener() = default;
|
|
|
|
virtual void itemHasbeenUpdated(std::shared_ptr<const RuntimeItem> current, std::shared_ptr<const RuntimeItem> previous) = 0;
|
|
|
|
virtual void memberHasbeenAppended(const RuntimeItem &parent, std::shared_ptr<const RuntimeItem> inst) = 0;
|
|
virtual void memberAboutToBeRemove(const RuntimeItem &parent, std::shared_ptr<const RuntimeItem> inst) = 0;
|
|
virtual void memberHasbeenReplaced(const RuntimeItem &parent, std::shared_ptr<const RuntimeItem> current, std::shared_ptr<const RuntimeItem> previous) = 0;
|
|
};
|
|
|
|
|
|
/**
|
|
* @brief 聚合体类型
|
|
*/
|
|
enum class AssembleType {
|
|
DATAS_ASSEMBLE, // 数据聚合体
|
|
MODULES_UNIT, // 模块单元
|
|
};
|
|
|
|
/**
|
|
* @brief 内存实例接口
|
|
*/
|
|
class RuntimeItem : public std::enable_shared_from_this<RuntimeItem> {
|
|
public:
|
|
explicit RuntimeItem(AssembleType t);
|
|
explicit RuntimeItem(const RuntimeItem & other);
|
|
|
|
std::shared_ptr<const RuntimeItem> add(std::shared_ptr<ItemListener> inst) const;
|
|
std::shared_ptr<const RuntimeItem> del(std::shared_ptr<ItemListener> inst) const;
|
|
void itemNotify(std::function<void(std::shared_ptr<ItemListener>)> proc) const;
|
|
|
|
AssembleType baseType() const;
|
|
virtual qulonglong hashCode() const;
|
|
virtual std::shared_ptr<const RuntimeItem> clone() const;
|
|
|
|
private:
|
|
AssembleType type_store;
|
|
QList<std::shared_ptr<ItemListener>> listener_collection;
|
|
};
|
|
|
|
/**
|
|
* @brief 下行实体访问接口
|
|
*/
|
|
class DownAccess : public std::enable_shared_from_this<DownAccess>{
|
|
public:
|
|
explicit DownAccess(std::shared_ptr<const RuntimeItem> peer);
|
|
explicit DownAccess(const DownAccess &other);
|
|
|
|
template<typename T>
|
|
std::shared_ptr<const T> typePeer() const {
|
|
return std::dynamic_pointer_cast<const T>(itemPeer());
|
|
}
|
|
std::shared_ptr<const RuntimeItem> itemPeer() const;
|
|
QList<std::shared_ptr<const DownAccess>> members() const;
|
|
|
|
std::shared_ptr<const DownAccess> append(std::shared_ptr<const DownAccess> child_inst) const;
|
|
std::shared_ptr<const DownAccess> remove(std::shared_ptr<const DownAccess> child_inst) const;
|
|
std::shared_ptr<const DownAccess> replace(std::shared_ptr<const DownAccess> current, std::shared_ptr<const DownAccess> previous) const;
|
|
|
|
virtual std::shared_ptr<const DownAccess> clone() const;
|
|
|
|
private:
|
|
std::shared_ptr<const RuntimeItem> runtime_item;
|
|
QList<std::shared_ptr<const DownAccess>> children_store;
|
|
};
|
|
|
|
/**
|
|
* @brief 上行访问接口
|
|
*/
|
|
class UpAccess : public std::enable_shared_from_this<UpAccess> {
|
|
public:
|
|
explicit UpAccess(std::shared_ptr<const UpAccess> parent, std::shared_ptr<const DownAccess> down);
|
|
explicit UpAccess(const UpAccess &other);
|
|
|
|
template<typename T>
|
|
std::shared_ptr<const T> typePeer() const {
|
|
return std::dynamic_pointer_cast<const T>(itemPeer());
|
|
}
|
|
std::shared_ptr<const DownAccess> downwardPeers() const;
|
|
std::shared_ptr<const UpAccess> parent() const;
|
|
virtual std::shared_ptr<const UpAccess> clone() const;
|
|
|
|
private:
|
|
std::shared_ptr<const DownAccess> runtime_downward;
|
|
std::shared_ptr<const UpAccess> 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<qulonglong, std::pair<std::shared_ptr<const TypeTemplate>, QString>> comps_store;
|
|
|
|
public:
|
|
explicit TypeTemplate();
|
|
explicit TypeTemplate(const TypeTemplate & other);
|
|
|
|
QString name() const;
|
|
std::shared_ptr<const TypeTemplate> setName(const QString &val) const;
|
|
|
|
QString type() const;
|
|
std::shared_ptr<const TypeTemplate> setType(const QString &val) const;
|
|
|
|
DataOritation oritation() const;
|
|
std::shared_ptr<const TypeTemplate> setOritation(DataOritation t) const;
|
|
|
|
virtual std::shared_ptr<const RuntimeItem> clone() const;
|
|
};
|
|
|
|
#endif // DATAPROTOTYPE_H
|