VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
plan.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2016 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
11 class DtPlan;
12 
13 #include <vlutil/vlString.h>
14 #include <vlutil/vlList.h>
15 #include <readerWriter/rwString.h>
17 #include "vrfplan/stmtIndex.h"
18 #include <vl/hostStructs.h>
19 #include <readerWriter/rwBoolean.h>
20 #include "vrfutil/rwIntegerList.h"
21 #include "vrfplan/rwTriggersList.h"
26 #include "vrfplan/vrfplanDefines.h"
27 #include "vrfutil/rwUUID.h"
28 #include "vrfplan/simCommandStmt.h"
29 
30 #include <set>
31 
32 class DtSimTask;
33 class DtSetDataRequest;
34 class DtSimTrigger;
35 class DtSimCommand;
36 class DtSimMessage;
37 class DtPlanBlock;
38 class DtTriggerBlock;
40 class DtPlanExecutor;
41 class DtSimCondExpr;
43 
46 {
47 public:
48  DtPlanStatus();
49  bool operator==(const DtPlanStatus& orig) const;
50  bool operator!=(const DtPlanStatus& orig) const;
51 
52  std::vector<int> executingTriggerStatementIds;
53  std::vector<DtUUID> executingTriggerNames;
54  std::vector<DtUUID> registeredTriggerNames;
56  bool isComplete;
59 };
60 
62  (const DtPlan& plan, void* usr);
63 
64 typedef void(*DtStmtTickCallbackFcn)
65  (DtPlan& plan, void* usr);
66 
67 typedef void(*DtSkipTaskCallbackFcn)
68  (void* usr);
69 
70 typedef void (*DtPlanCallbackFcn)
71  (const DtUUID& name, const std::vector<DtSimStatement*>& statements, bool append,
72  void* usr);
73 
74 typedef void (*DtPlanStatementCallbackFcn)
75  (const DtUUID& name, DtPlanStatus planStatus, void* usr);
76 
77 typedef void (*DtPlanCompleteCallbackFcn)
78  (const DtUUID& name, void* usr);
79 
81  (DtIfMultiplePlanResponse*, void* usr);
82 
93 {
94 public:
96  {
97  None = 0,
98  IsQuickLaunch = 0x00000001,
99  ShowOnQuickLaunchToolbar = 0x00000002,
100  Launched = 0x00000004
101  };
102 
109  DtPlan();
110 
116  DtPlan(const DtUUID& planName,
117  DtPlanExecutor* planExecutor,
118  const DtString& name = "Plan",
119  DtReaderWriterRegistry* parentRegistry = NULL);
120 
124 
128  DtPlan(const DtString& name, const DtUUID& planName,
129  const DtPlan& orig, DtReaderWriterRegistry* parentRegistry = NULL);
130  DtPlan(const DtPlan& orig);
131 
133  virtual ~DtPlan();
134 
136  virtual void init();
137 
139  virtual void addVariables();
140 
143  virtual DtPlan* clone(const DtString& name,
144  const DtUUID& planName,
145  DtReaderWriterRegistry* parentRegistry = NULL) const;
146 
151  DtPlan& operator=(const DtPlan& orig);
152 
154  virtual bool operator==(const DtPlan& orig) const;
155 
156  virtual const DtUUID& planName() const;
157  virtual void setPlanName(const DtUUID& name);
158  virtual bool planNameSpecified() const;
159 
164  virtual void setIsQuickLaunch(bool);
165  virtual bool isQuickLaunch() const;
166 
168  virtual void setShowOnQuickLaunchToolbar(bool);
169  virtual bool showOnQuickLaunchToolbar() const;
170 
174  virtual void setIsLaunched(bool);
175  virtual bool isLaunched() const;
176 
178  virtual void setQuickLaunchIcon(const DtString&);
179  virtual const DtString& quickLaunchIcon() const;
180 
182  virtual void setOrdinal(int);
183  virtual int ordinal() const;
184 
186  virtual void setPlanSummary(const DtString&);
187  virtual const DtString& planSummary() const;
188 
190  //virtual DtSimManager* simManager() const;
191 
192  virtual void setPlanExecutor(DtPlanExecutor* planExecutor);
193  virtual DtPlanExecutor* planExecutor() const;
194 
197  virtual void enableExecutionState();
198  virtual void disableExecutionState();
199  virtual bool executionState() const;
200 
203  virtual void awaitingTask();
204 
206  virtual bool isAwatingTask() const;
207 
209  virtual void addTrigger(const DtTriggerStmt&);
210 
212  virtual DtTriggerStmt* triggerStatement(const DtUUID&) const;
213 
216  virtual void removeTrigger(const DtUUID&);
217 
219  virtual void renameTrigger(const DtUUID&, const DtString& newName);
220 
222  virtual void updateTrigger(const DtTriggerStmt*);
223 
225  virtual void setTriggers(const DtRwTriggersList&);
226 
228  const DtRwTriggersList& triggers() const { return myTriggers; };
229  DtRwTriggersList& triggers() { return myTriggers; };
230 
236  virtual void pushExecutionStack();
237 
240  virtual void suspendExecutionStack(bool suspendedFromTrigger = false);
241 
249  virtual void popExecutionStack(bool forceStep = false);
250 
253  virtual void executeTrigger(DtTriggerBlock* whenBlock);
254 
256  virtual void executeBlock(DtSimBlock* block);
257 
259  virtual bool taskRequestPending() const;
260 
262  virtual void setTaskRequestPending(bool newValue = true);
263 
265  const DtRwVariableBindings& variables() const { return myPlanVariables; };
266 
267  virtual DtReaderWriter* variable(const DtString&);
268 
271  virtual void clearVariables();
272 
274  virtual void addVariable(DtRwPlanVariable*);
275 
277  virtual void setVariables(const DtRwVariableBindings&);
278 
282  virtual bool executeTask(const DtSimTask& taskToSend) const;
283 
287  virtual bool executeSetDataRequest(
288  const DtSetDataRequest& setToSend) const;
289 
295  virtual bool executeSimCommand(const DtSimCommand& command, DtSimCommandContextPtr& context) const;
296 
299  virtual bool isSimCommandComplete(const DtSimCommand& command, const DtSimCommandContextPtr& context) const;
300 
303  virtual bool evaluateConditional(const DtSimCondExpr* condExpr) const;
304 
306  virtual DtStmtIndex firstStmt() const;
307 
309  virtual DtPlanBlock* mainBlock() const;
310 
312  virtual void empty();
313 
315  virtual bool isEmpty() const;
316 
318  virtual DtList* triggerList();
319  virtual const DtList* triggerList() const;
320 
322  virtual void addTriggerToExecute(DtSimTrigger* trigger);
324  virtual void removeTriggerFromPendingExecution(DtSimTrigger* trigger);
325 
327  virtual DtList* executionStack();
328  virtual const DtList* executionStack() const;
329 
332  virtual bool validatePlan();
333 
337  virtual const DtStmtIndex& currentStmt() const;
339  virtual void setCurrentStmt(const DtStmtIndex& nextStatement);
340 
342  virtual void setCurrentStatementExecutionId(int id);
343 
345  virtual bool isComplete() const;
346 
349  virtual void setIsComplete(bool completeFlag = true);
350 
353  virtual void setLastStatementExecuted(bool);
354  virtual bool lastStatementExecuted() const;
356 
359  virtual bool isAbandoned() const;
362  virtual void setIsAbandoned(bool v);
363 
365  virtual bool isExecuting() const;
366 
368  virtual DtPlanStatus currentStatus() const;
369 
371  virtual void reset();
372 
374  virtual void stopCurrentTask();
375 
380  virtual void abandonPlan(bool sendWaitTask);
381 
385  virtual void restartPlan(bool sendWaitTask = true);
386 
391  virtual bool translateIndex(DtStmtIndex& stmtIndex) const;
392 
396  virtual void translateIndices(DtList& stmtIndexList) const;
397 
399  virtual void tick();
400 
404  virtual void mergeEditedPlanWith(const DtPlan& oldPlan);
405 
408  virtual DtRecursiveSimBlockIterator* spawnRecursiveIterator() const;
409 
413  virtual void putSelf(std::string& fp, int indentLevel = 0,
414  bool writeUnspecified = false, const DtFilename& path = DtReaderWriter::appPath());
415 
419  virtual void getSelf(DtlObjPtr args,
422 
425  virtual void addStatementChangedCallback(
426  DtCurrentStatementChangedCallbackFcn fcn, void* usrData);
427 
429  virtual void removeStatementChangedCallback(
430  DtCurrentStatementChangedCallbackFcn fcn, void* usrData);
431 
433  virtual void addTickCallback(
434  DtStmtTickCallbackFcn fcn, void* usrData);
435 
437  virtual void removeTickCallback(
438  DtStmtTickCallbackFcn fcn, void* usrData);
439 
441  virtual void reissueStatementIds(DtSimStatement* stmt);
442 
444  virtual void pushExecutingTrigger(int);
445  virtual void popExecutingTrigger();
446  virtual int executingTriggerStatementId() const;
447 
449  virtual std::vector<int> executingTriggerStatementIds() const;
450 
452  virtual DtUUID executingTriggerName() const;
453 
455  virtual std::vector<DtUUID> executingTriggerNames() const;
456 
458  virtual std::vector<DtUUID> registeredTriggerNames() const;
459 
461  virtual bool triggerIsRunning(const DtUUID&) const;
462 
464  virtual bool triggerIsRegistered(const DtUUID&) const;
465 
467  virtual void removeScheduledTriggers(const DtUUID&);
468 
470  virtual void mapRegisteredTriggersToTriggerStatements();
471 
474  virtual DtSimStatement* lookupStatementByCursor(int cursor);
475  virtual DtSimStatement* lookupStatementByStatementId(int) const;
476 
478  virtual void setContinuePlan(bool);
479 
484  virtual std::vector<DtReaderWriter*> substituteVariablesIn(DtReaderWriter*) const;
485 
487  virtual std::vector<DtReaderWriter*> substitutedValues(const DtReaderWriter*) const;
488 
490  virtual bool subsituteUUIDIfAvailable(const DtReaderWriter*, DtUUID& uuid) const;
491 
496  virtual void removeTopExecutionStack();
497 
499  virtual void addSkipTaskCallback(DtSkipTaskCallbackFcn fcn, void* usrData);
500 
502  virtual void removeSkipTaskCallback(DtSkipTaskCallbackFcn fcn, void* usrData);
503 
504  virtual void invokeSkipTaskCallbacks();
505 
506 protected:
507 
509  virtual void processAwaitingTask();
510 
513  virtual void createMainBlock();
514 
518  virtual void copyMainBlock(const DtPlan& otherPlan);
519 
523  virtual void copyAndTranslateExecutionStack(const DtPlan& otherPlan);
524 
528  virtual void copyAndTranslateTriggers(const DtPlan& otherPlan);
529 
532  virtual void curStmtChanged();
533 
536  virtual void continuePlan();
537 
544  virtual void stepStatement(bool forceStep = false);
545 
549  virtual void executeStatement();
550 
553  virtual void clearTriggerList();
554 
558  virtual void clearExecutionStack();
559 
561  virtual void emtpyExecutionStack();
562 
564 
565  virtual void mapExecutionStackToRwExecutionStack(DtRwPlanExecutionStack& rwExecutionStack);
567  virtual void mapPendingTriggersToPendingTriggerDataList();
569 
571 
572  virtual void mapOldExecutionCursorStackToExecutionStack(const DtRwIntegerList& executionCursorStack);
575  virtual void mapRwExecutionStackToExecutionStack(const DtRwPlanExecutionStack& rwExecutionStack);
576  virtual void mapPendingTriggerDataToPendingTriggers();
578 
581  virtual int statementIdToCursor(DtStmtIdType statementId);
582  virtual DtStmtIdType cursorToStatementId(int cursor);
583 
584  virtual DtSimStatement* lookupStatementByStatementId(DtSimBlock*, int, std::set<DtUUID>& triggersVisited) const;
585 
587  virtual void createTriggersFromWhenBlocks();
588  virtual void createTriggersFromWhenBlocks(DtSimBlock*);
589  virtual void createTriggersFromWhenBlocks(DtSimBlock*, DtSimStatement*);
590 
592  virtual void removeTriggerRegistrationFrom(DtSimBlock*, const DtUUID&);
593  virtual void removeTriggerRegistrationFrom(DtSimBlock*, DtSimStatement*, const DtUUID&);
594 
596  virtual void mapExecutionStackToExecutingTriggers();
597 
598 protected:
599 
606 
610 
616 
620 
624 
628 
631 
634  //DtList myStatementChangedCbs;
635 
638  //DtList myStatementTickCbs;
639 
642  //DtList myStatementSkipTaskCbs;
643 
647 
650 
654 
659 
662 
664 
666 
668 
671 
677 
681 
683 
685 };
686 
687 namespace DtBufferSerialize
688 {
691  DT_DLL_vrfplan int getSize(const DtPlan& contentPtr);
692 
696  DT_DLL_vrfplan char *encode(const DtPlan& adminContentPtr, char *buffer);
697 
701  DT_DLL_vrfplan const char *decode(DtPlan& adminContentPtr, const char *buffer);
702 }
bool operator==(const DtReaderWriter &) const
Equivalence operator.
UUID is a unique ID wrapper class.
Definition: uuid.h:59
DtPlanStatus myLastSentStatus
The status that was last sent out though the curretStatement callbacks.
Definition: plan.h:670
class DtPlanBlock:
Definition: planBlock.h:22
An abstract interface for the execution of a plan. This class defines the interface that is used to c...
Definition: planExecutor.h:32
DtList myExecutionStack
The top of the execution stack is the Plan&#39;s current statement (fetched with currentStmt()). Whenever a retasking trigger fires, it pushes this stack down so that the Plan can pick up where it left off at the end of the trigger.
Definition: plan.h:615
DT_DLL_readerWriter int getSize(const DtString &val)
The number of bytes required to encode the value.
DtPlanBlock * myMainBlock
The main Block is the top-level Block of the plan and is the only Block that is considered to be &quot;own...
Definition: plan.h:609
DtRwBoolean myTaskRequestPending
The TaskRequestPending flag is set to true when an Entity requests a new task, and is cleared when a ...
Definition: plan.h:605
DtList myPendingTriggers
A list of all registered DtSimTriggers.
Definition: plan.h:630
DT_DLL_terrainCS bool operator==(const DtDegMinSec &lhs, const DtDegMinSec &rhs)
Definition: readerWriter.h:85
Description: Readable, Writable DtString Variable substitutions are done on this object when it is re...
Definition: rwString.h:20
class DtStmtIndex:
Definition: stmtIndex.h:24
Definition: readerWriterRegistry.h:39
Contains the DtUUID class declaration.
bool isAbandoned
Definition: plan.h:58
const DtRwTriggersList & triggers() const
Returns plans triggers.
Definition: plan.h:228
DtRwTriggersList myTriggers
List of all possible triggers in the plan. This will be a collection of when statements that represen...
Definition: plan.h:653
class DtRwTriggerDataList:
Definition: rwTriggerDataList.h:27
DtRwInt myOrdinal
Definition: plan.h:676
Iterator for iterating over a DtRwIntrusiveList of DtSimStatements and all its descendants (as repres...
Definition: recursiveSimBlockIterator.h:32
uuid class
Definition: rwUUID.h:26
ReaderWriter object that maintains a list of reader-writer variable bindings. It keeps a list of name...
Definition: rwVariableBindings.h:27
virtual void reset()
For those reader/writer items that support it, resets the reader/writer value to original state Defau...
class DtSimBlock:
Definition: simBlock.h:27
DtSetDataRequest is an abstract base class from which real setDataRequests can derive. It manages the read/write capability; derived classes need only use and register read/writatble data types for derived information.
Definition: setDataRequest.h:41
Instances of DtRwIntegerList are lists of readable, writeable integers (DtRwInts). The list contains pointers to DtRwInt instances.
Definition: rwIntegerList.h:19
std::list< const DtRwVariableBindings * > DtVariableBindingsList
Definition: readerWriterRegistry.h:29
DtPlanExecutor * myPlanExecutor
Definition: plan.h:667
bool myContinuePlan
Definition: plan.h:665
File: simMsg.h.
Definition: simMessage.h:35
Description: Readable, Writable int.
Definition: rwInt.h:25
std::vector< int > executingTriggerStatementIds
Definition: plan.h:52
void(* DtPlanCallbackFcn)(const DtUUID &name, const std::vector< DtSimStatement * > &statements, bool append, void *usr)
Definition: plan.h:71
This class works just as DtCalllbackTable, but manages callbacks that have no arguments, and therefore don&#39;t fit in the template defined by DtCallbackList.
Definition: noArgumentCallbackList.h:151
std::vector< DtFilename > SearchPaths
Definition: readerWriter.h:92
bool isExecuting
Definition: plan.h:57
DtRwUUID myPlanName
Definition: plan.h:663
void(* DtStmtTickCallbackFcn)(DtPlan &plan, void *usr)
Definition: plan.h:65
DtSimCommand is an abstract base class from which commands can derive. It manages the read/write capa...
Definition: simCommand.h:32
DT_DLL_readerWriter char * encode(const DtFilename &val, char *buffer)
Serializes the provided value val into buffer. buffer must have at least the number of bytes returned...
bool myExecutionIsEnabled
Flag indication whether execution is enabled (can we start or advance through plan statements...
Definition: plan.h:657
DtCallbackList< const DtPlan & > myStatementChangedCbs
A list of all the DtCurrentStatementChangedCallbackFcn callbacks.
Definition: plan.h:633
DtNoArgumentCallbackList myStatementSkipTaskCbs
A list of all the DtStmtTickCallbackFcn callbacks.
Definition: plan.h:641
virtual void getSelf(DtlObjPtr args, const DtReaderWriter::SearchPaths &searchPaths=SearchPaths(), const DtVariableBindingsList &variableBindings=nullVariableReference())
Top level to read itself from an input stream. searchPath is passed down to all DtReaderWriter member...
void(* DtMultiplePlanRequestCallbackFcn)(DtIfMultiplePlanResponse *, void *usr)
Definition: plan.h:81
virtual void putSelf(std::string &fp, int indentLevel=0, bool writeUnspecified=false, const DtFilename &path=DtFilename::nullFilename())
Top level call to write itself to file. If write unspecified is true, will write entries that are uns...
class DtTriggerBlock:
Definition: triggerBlock.h:26
class DtPlan:
Definition: plan.h:92
void(* DtPlanStatementCallbackFcn)(const DtUUID &name, DtPlanStatus planStatus, void *usr)
Definition: plan.h:75
DtSimCondExpr is an abstract base class representing various Conditional Expressions used by the Plan...
Definition: simCondExpr.h:53
bool myWantsExecutionStateEnabled
Definition: plan.h:658
Small container class that holds the status of a running DtPlan.
Definition: plan.h:45
static const DtVariableBindingsList & nullVariableReference()
class DtIfMultiplePlanResponse:
Definition: ifMultiplePlanResponse.h:32
DtCallbackList< DtPlan & > myStatementTickCbs
A list of all the DtTickCallbackFcn callbacks.
Definition: plan.h:637
DtRwBoolean myLastStatementExecuted
myLastStatementExecuted makes sure that nothing will get executed in the plan after triggers have bee...
Definition: plan.h:623
QuickLaunchFlags
Definition: plan.h:95
Description: Readable, Writable bool.
Definition: rwBoolean.h:26
class DtSimTrigger:
Definition: simTrigger.h:28
const DtRwVariableBindings & variables() const
Returns plan variables.
Definition: plan.h:265
The DtRwPlanVariable is a base class that minimally implements a plan variable. Subclasses will imple...
Definition: rwPlanVariable.h:18
class DtSimStatement:
Definition: simStatement.h:38
std::vector< DtUUID > registeredTriggerNames
Definition: plan.h:54
DtRwTriggersList & triggers()
Definition: plan.h:229
Definition: rwTemplatedList.h:34
DtSimTask is an abstract base class from which real tasks can derive. It manages the read/write capab...
Definition: simTask.h:30
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtRwString myPlanSummary
Plan summary. Currently used by synchronization matrices only.
Definition: plan.h:680
void(* DtCurrentStatementChangedCallbackFcn)(const DtPlan &plan, void *usr)
Definition: plan.h:62
DtRwIntegerList myExecutingTriggers
Definition: plan.h:682
void(* DtSkipTaskCallbackFcn)(void *usr)
Definition: plan.h:68
DtRwBoolean myAbandoned
True if this plan has been abandoned. If the plan is abandoned, it will also show as &quot;complete&quot;...
Definition: plan.h:627
DtRwVariableBindings myPlanVariables
Definition: plan.h:684
#define DT_DLL_vrfplan
This file is used to determine how to build.
Definition: vrfplanDefines.h:28
const DtReaderWriter & operator=(const DtReaderWriter &orig)
assignment operator
DT_DLL_terrainCS bool operator!=(const DtDegMinSec &lhs, const DtDegMinSec &rhs)
DT_DLL_readerWriter const char * decode(DtString &val, const char *buffer)
Decodes a value from buffer and places the result in val of the type specified by val...
Definition: triggerStmt.h:63
void(* DtPlanCompleteCallbackFcn)(const DtUUID &name, void *usr)
Definition: plan.h:78
DtRwInt myQuickLaunchFlags
Additional data used to indicate if this is a quick launch plan and the icon associated with it...
Definition: plan.h:674
bool myAwaitingTaskFlag
Flag indicating we&#39;ve received an awaiting task request.
Definition: plan.h:661
std::vector< DtUUID > executingTriggerNames
Definition: plan.h:53
DtRwTriggerDataList myPendingTriggerDataList
Reader-writer members used to hold checkpoint information about the plan. These variables only contai...
Definition: plan.h:649
static const DtFilename & appPath()
Gets the current working directory. The first time this accessor is called, it determines the current...
int currentStatementId
Definition: plan.h:55
DtRwBoolean myIsComplete
myIsComplete Disables awaitingTask() and causes it to emit continuous Wait tasks. ...
Definition: plan.h:619
DtRwString myQuickLaunchIcon
Definition: plan.h:675
Instances of DtRwTriggersList are lists of readable, writeable when statements (triggers) The list co...
Definition: rwTriggersList.h:21
bool isComplete
Definition: plan.h:56
DtBoost::shared_ptr< DtSimCommandContext > DtSimCommandContextPtr
Definition: simCommandStmt.h:28

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)