functionhandler.h
Go to the documentation of this file.
1 #ifndef DNAI_CORE_FUNCTIONHANDLER_H
2 #define DNAI_CORE_FUNCTIONHANDLER_H
3 
4 #include <queue>
5 #include <map>
6 
7 #include <QObject>
8 #include <QStack>
9 
10 #include "entitymanager.h"
11 
12 #include "instructionhandler.h"
13 
14 namespace dnai
15 {
16  namespace gcore
17  {
18  class FunctionHandler : public QObject
19  {
20  Q_OBJECT
21  Q_PROPERTY(InstructionHandler *instruction READ instruction CONSTANT)
22 
23  public:
25  ~FunctionHandler() = default;
26 
27  public:
28  void setup();
29 
30  public slots:
31  void onEntityAdded(::core::EntityID id, models::Entity &added);
32  void onEntityRemoved(::core::EntityID id, models::Entity &removed);
33 
34  public:
35  Q_INVOKABLE void pendingParameter(quint32 func, QString const &paramName);
36  Q_INVOKABLE void pendindRemoveParam(quint32 func, QString const &paramName);
37 
38  public:
39  Q_INVOKABLE void pendingReturn(quint32 func, QString const &returnName);
40  Q_INVOKABLE void pendingRmReturn(quint32 func, QString const &returnName);
41 
42  public:
43  Q_INVOKABLE void setEntryPoint(quint32 function, quint32 instruction, bool save = true) const;
44  Q_INVOKABLE void setParameter(quint32 func, QString const &paramName, bool save = true) const;
45  Q_INVOKABLE void setReturn(quint32 func, QString const &retName, bool save = true) const;
46  Q_INVOKABLE void addInstruction(quint32 func, quint32 instrType, QList<quint32> const &arguments, bool save = true) const;
47  Q_INVOKABLE void removeInstruction(quint32 func, quint32 instruction, bool save = true);
48 
49  private:
50  models::gui::declarable::Function *getFunctionData(::core::EntityID function, bool throws = false) const;
51  std::list<quint32> getConstructionList(models::gui::Instruction *instr) const;
52  QList<QString> getLinkedEntities(std::list<quint32> const &construction) const;
53 
54  private:
55  models::gui::Instruction *createInstruction(qint32 type, std::list<quint32> const &constrution = std::list<quint32>());
56 
57  private:
59  QString getInstructionHash(QUuid funcguid, qint32 type) const;
60 
61  public:
62  void rebuildInstructions(QList<models::gui::Instruction *> instructions);
63 
64  public:
65  void onEntryPointSet(quint32 function, quint32 instruction);
66  void onSetEntryPointError(quint32 function, quint32 instruction, QString const &message) const;
67 
68  void onParameterSet(::core::EntityID function, QString const &paramName);
69  void onSetParameterError(::core::EntityID function, QString const &paramName, QString const &message) const;
70 
71  void onReturnSet(::core::EntityID function, QString const &returnName);
72  void onSetReturnError(::core::EntityID function, QString const &returnName, QString const &message);
73 
74  void onInstructionAdded(::core::EntityID function, ::core::INSTRUCTION type, std::list<::core::EntityID> const &arguments, ::core::InstructionID instruction);
75  void onAddInstructionError(::core::EntityID function, ::core::INSTRUCTION type, std::list<::core::EntityID> const &arguments, QString const &messsage);
76 
77  void onInstructionRemoved(::core::EntityID function, ::core::InstructionID instruction);
78  void onRemoveInstructionError(::core::EntityID funtion, ::core::InstructionID instruction, QString msg);
79 
80  signals:
82  void addInstructionError(quint32 func, quint32 instrType, QList<quint32> const &args, QString const &msg);
85  void parameterSet(dnai::models::Entity *func, QString param);
86  void returnSet(dnai::models::Entity *func, QString ret);
87 
88  private:
90 
91  public:
93 
94  private:
96 
97  private:
98  //this queue is used to set a variable as parameter when its added
99  std::queue<std::pair<quint32, QString>> pendingParams;
100  //this queue is when a variable is identified to be set as a parameter
101  std::queue<models::Entity *> params;
102  //this queue is when a parameter is removed
103  std::queue<std::pair<quint32, QString>> pendingRmParam;
104 
105  private:
106  //this queue is used to set a variable as return when its added
107  std::queue<std::pair<quint32, QString>> pendingRet;
108  //this queue is when a variable is identified to be set as return
109  std::queue<models::Entity *> returns;
110  //this queue is when a return is removed
111  std::queue<std::pair<quint32, QString>> pendingRmRet;
112 
113  private:
114  //this queue is used to save an instruction that has to be set
115  std::queue<models::gui::Instruction *> pendingInstruction;
116 
117  //this queue is used to try to declare instructions once an entity is added
118  std::list<models::Entity *> pendingFunctionInstructions;
119 
120  private:
121  //map that contains removed instructions
122  QHash<QString, QStack<models::gui::Instruction *>> removedInstructions;
123  //map that contains added instructions
124  QHash<QString, QStack<models::gui::Instruction *>> addedInstructions;
125 
126  private:
127  //instruction function map
128  QHash<models::gui::Instruction *, models::Entity *> instructionsFunction;
129 
130  private:
131  //map to store instruction that are currently rebuilding
132  QSet<models::gui::Instruction *> pendingRebuild;
133  };
134  }
135 }
136 
137 #endif // DNAI_CORE_FUNCTIONHANDLER_H
Q_INVOKABLE void setReturn(quint32 func, QString const &retName, bool save=true) const
Definition: functionhandler.cpp:182
Q_INVOKABLE void addInstruction(quint32 func, quint32 instrType, QList< quint32 > const &arguments, bool save=true) const
Definition: functionhandler.cpp:199
Definition: instruction.h:15
Q_INVOKABLE void removeInstruction(quint32 func, quint32 instruction, bool save=true)
Definition: functionhandler.cpp:224
std::queue< std::pair< quint32, QString > > pendingParams
Definition: functionhandler.h:99
models::gui::Instruction * createInstruction(qint32 type, std::list< quint32 > const &constrution=std::list< quint32 >())
Definition: functionhandler.cpp:304
std::list< quint32 > getConstructionList(models::gui::Instruction *instr) const
Definition: functionhandler.cpp:282
void onSetParameterError(::core::EntityID function, QString const &paramName, QString const &message) const
Definition: functionhandler.cpp:540
void parameterSet(dnai::models::Entity *func, QString param)
Definition: moc_functionhandler.cpp:417
std::queue< models::Entity * > params
Definition: functionhandler.h:101
void onSetReturnError(::core::EntityID function, QString const &returnName, QString const &message)
Definition: functionhandler.cpp:577
void onEntityRemoved(::core::EntityID id, models::Entity &removed)
Definition: functionhandler.cpp:99
InstructionHandler m_instruction
Definition: functionhandler.h:95
QSet< models::gui::Instruction * > pendingRebuild
Definition: functionhandler.h:132
Definition: entitymanager.h:15
void onParameterSet(::core::EntityID function, QString const &paramName)
Definition: functionhandler.cpp:513
std::list< models::Entity * > pendingFunctionInstructions
Definition: functionhandler.h:118
QHash< QString, QStack< models::gui::Instruction * > > removedInstructions
Definition: functionhandler.h:122
InstructionHandler * instruction()
void onReturnSet(::core::EntityID function, QString const &returnName)
Definition: functionhandler.cpp:550
void returnSet(dnai::models::Entity *func, QString ret)
Definition: moc_functionhandler.cpp:424
QList< QString > getLinkedEntities(std::list< quint32 > const &construction) const
Definition: functionhandler.cpp:293
void onEntityAdded(::core::EntityID id, models::Entity &added)
Definition: functionhandler.cpp:51
Q_INVOKABLE void pendindRemoveParam(quint32 func, QString const &paramName)
Definition: functionhandler.cpp:135
void onAddInstructionError(::core::EntityID function,::core::INSTRUCTION type, std::list<::core::EntityID > const &arguments, QString const &messsage)
Definition: functionhandler.cpp:637
models::gui::declarable::Function * getFunctionData(::core::EntityID function, bool throws=false) const
Definition: functionhandler.cpp:266
void onInstructionAdded(::core::EntityID function,::core::INSTRUCTION type, std::list<::core::EntityID > const &arguments,::core::InstructionID instruction)
Definition: functionhandler.cpp:587
Q_INVOKABLE void pendingRmReturn(quint32 func, QString const &returnName)
Definition: functionhandler.cpp:145
std::queue< std::pair< quint32, QString > > pendingRmParam
Definition: functionhandler.h:103
Q_INVOKABLE void setEntryPoint(quint32 function, quint32 instruction, bool save=true) const
Definition: functionhandler.cpp:150
void onRemoveInstructionError(::core::EntityID funtion,::core::InstructionID instruction, QString msg)
Definition: functionhandler.cpp:672
std::queue< std::pair< quint32, QString > > pendingRmRet
Definition: functionhandler.h:111
Definition: functionhandler.h:18
FunctionHandler(EntityManager &manager)
Definition: functionhandler.cpp:19
Q_INVOKABLE void setParameter(quint32 func, QString const &paramName, bool save=true) const
Definition: functionhandler.cpp:166
void addInstructionError(quint32 func, quint32 instrType, QList< quint32 > const &args, QString const &msg)
Definition: moc_functionhandler.cpp:396
void instructionRemoved(dnai::models::Entity *func, dnai::models::gui::Instruction *instruction)
Definition: moc_functionhandler.cpp:403
Definition: api.h:13
void rebuildInstructions(QList< models::gui::Instruction * > instructions)
Definition: functionhandler.cpp:408
void refreshPendingFunctionInstructions()
FunctionHandler::refreshPendingFunctionInstructions.
Definition: functionhandler.cpp:328
void onInstructionRemoved(::core::EntityID function,::core::InstructionID instruction)
Definition: functionhandler.cpp:648
std::queue< std::pair< quint32, QString > > pendingRet
Definition: functionhandler.h:107
void onEntryPointSet(quint32 function, quint32 instruction)
Definition: functionhandler.cpp:491
Definition: instructionhandler.h:15
QString getInstructionHash(QUuid funcguid, qint32 type) const
Definition: functionhandler.cpp:403
QHash< models::gui::Instruction *, models::Entity * > instructionsFunction
Definition: functionhandler.h:128
std::queue< models::gui::Instruction * > pendingInstruction
Definition: functionhandler.h:115
std::queue< models::Entity * > returns
Definition: functionhandler.h:109
Definition: entity.h:71
void onSetEntryPointError(quint32 function, quint32 instruction, QString const &message) const
Definition: functionhandler.cpp:504
void entryPointSet(dnai::models::Entity *func, dnai::models::gui::Instruction *entry)
Definition: moc_functionhandler.cpp:410
void instructionAdded(dnai::models::Entity *func, dnai::models::gui::Instruction *instruction)
Definition: moc_functionhandler.cpp:389
EntityManager & manager
Definition: functionhandler.h:89
void setup()
Definition: functionhandler.cpp:26
Q_INVOKABLE void pendingParameter(quint32 func, QString const &paramName)
Definition: functionhandler.cpp:130
Q_INVOKABLE void pendingReturn(quint32 func, QString const &returnName)
Definition: functionhandler.cpp:140
QHash< QString, QStack< models::gui::Instruction * > > addedInstructions
Definition: functionhandler.h:124