54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
#ifndef MAPCORE_H
|
|
#define MAPCORE_H
|
|
|
|
#include <QStandardItemModel>
|
|
#include "moduleprototype.h"
|
|
|
|
|
|
class MapCore
|
|
{
|
|
public:
|
|
MapCore();
|
|
|
|
std::shared_ptr<const DownAccess> root() const;
|
|
void setRoot(std::shared_ptr<const DownAccess> root);
|
|
std::shared_ptr<const DownAccess> refreshRoot(std::shared_ptr<const DownAccess> old, std::shared_ptr<const DownAccess> _new);
|
|
|
|
QList<std::shared_ptr<const TypeTemplate>> dataTypes() const;
|
|
void typeAppend(std::shared_ptr<const TypeTemplate> type);
|
|
void typeRemove(std::shared_ptr<const TypeTemplate> type);
|
|
void typeUpdate(std::shared_ptr<const TypeTemplate> type);
|
|
|
|
private:
|
|
std::shared_ptr<const DownAccess> root_bind = nullptr;
|
|
};
|
|
|
|
class MapVisitor{
|
|
public:
|
|
explicit MapVisitor(MapCore &base);
|
|
/**
|
|
* @brief 获取指定节点的访问句柄
|
|
* @param node
|
|
* @return
|
|
*/
|
|
std::shared_ptr<const DownAccess> findTarget(std::shared_ptr<const RuntimeItem> node) const;
|
|
|
|
std::shared_ptr<const UpAccess> findLink(std::shared_ptr<const RuntimeItem> node) const;
|
|
|
|
/**
|
|
* @brief 获取满足指定条件的节点
|
|
* @param proc
|
|
* @return
|
|
*/
|
|
QList<std::shared_ptr<const DownAccess>> collect(std::function<bool(std::shared_ptr<const DownAccess>)> proc) const;
|
|
|
|
private:
|
|
MapCore &core_bind;
|
|
|
|
std::shared_ptr<const UpAccess> find_link(std::shared_ptr<const UpAccess> pinst, std::shared_ptr<const DownAccess> handle, std::shared_ptr<const RuntimeItem> node) const;
|
|
std::shared_ptr<const DownAccess> find_target(std::shared_ptr<const DownAccess> handle, std::shared_ptr<const RuntimeItem> node) const;
|
|
QList<std::shared_ptr<const DownAccess>> collect(std::shared_ptr<const DownAccess> handle, std::function<bool(std::shared_ptr<const DownAccess>)> proc) const;
|
|
};
|
|
|
|
#endif // MAPCORE_H
|