VR-Forces 5.0.2 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 
235  virtual void pushExecutionStack();
236 
239  virtual void suspendExecutionStack();
240 
248  virtual void popExecutionStack(bool forceStep = false);
249 
252  virtual void executeTrigger(DtTriggerBlock* whenBlock);
253 
255  virtual void executeBlock(DtSimBlock* block);
256 
258  virtual bool taskRequestPending() const;
259 
261  virtual void setTaskRequestPending(bool newValue = true);
262 
264  const DtRwVariableBindings& variables() const { return myPlanVariables; };
265 
266  virtual DtReaderWriter* variable(const DtString&);
267 
270  virtual void clearVariables();
271 
273  virtual void addVariable(DtRwPlanVariable*);
274 
276  virtual void setVariables(const DtRwVariableBindings&);
277 
281  virtual bool executeTask(const DtSimTask& taskToSend) const;
282 
286  virtual bool executeSetDataRequest(
287  const DtSetDataRequest& setToSend) const;
288 
294  virtual bool executeSimCommand(const DtSimCommand& command, DtSimCommandContextPtr& context) const;
295 
298  virtual bool isSimCommandComplete(const DtSimCommand& command, const DtSimCommandContextPtr& context) const;
299 
302  virtual bool evaluateConditional(const DtSimCondExpr* condExpr) const;
303 
305  virtual DtStmtIndex firstStmt() const;
306 
308  virtual DtPlanBlock* mainBlock() const;
309 
311  virtual void empty();
312 
314  virtual bool isEmpty() const;
315 
317  virtual DtList* triggerList();
318  virtual const DtList* triggerList() const;
319 
321  virtual void addTriggerToExecute(DtSimTrigger* trigger);
323  virtual void removeTriggerFromPendingExecution(DtSimTrigger* trigger);
324 
326  virtual DtList* executionStack();
327  virtual const DtList* executionStack() const;
328 
331  virtual bool validatePlan();
332 
336  virtual const DtStmtIndex& currentStmt() const;
338  virtual void setCurrentStmt(const DtStmtIndex& nextStatement);
339 
341  virtual void setCurrentStatementExecutionId(int id);
342 
344  virtual bool isComplete() const;
345 
348  virtual void setIsComplete(bool completeFlag = true);
349 
352  virtual void setLastStatementExecuted(bool);
353  virtual bool lastStatementExecuted() const;
355 
358  virtual bool isAbandoned() const;
361  virtual void setIsAbandoned(bool v);
362 
364  virtual bool isExecuting() const;
365 
367  virtual DtPlanStatus currentStatus() const;
368 
370  virtual void reset();
371 
376  virtual void abandonPlan(bool sendWaitTask);
377 
381  virtual void restartPlan(bool sendWaitTask = true);
382 
387  virtual bool translateIndex(DtStmtIndex& stmtIndex) const;
388 
392  virtual void translateIndices(DtList& stmtIndexList) const;
393 
395  virtual void tick();
396 
400  virtual void mergeEditedPlanWith(const DtPlan& oldPlan);
401 
404  virtual DtRecursiveSimBlockIterator* spawnRecursiveIterator() const;
405 
409  virtual void putSelf(std::string& fp, int indentLevel = 0,
410  bool writeUnspecified = false, const DtFilename& path = DtReaderWriter::appPath());
411 
415  virtual void getSelf(DtlObjPtr args,
418 
421  virtual void addStatementChangedCallback(
422  DtCurrentStatementChangedCallbackFcn fcn, void* usrData);
423 
425  virtual void removeStatementChangedCallback(
426  DtCurrentStatementChangedCallbackFcn fcn, void* usrData);
427 
429  virtual void addTickCallback(
430  DtStmtTickCallbackFcn fcn, void* usrData);
431 
433  virtual void removeTickCallback(
434  DtStmtTickCallbackFcn fcn, void* usrData);
435 
437  virtual void reissueStatementIds(DtSimStatement* stmt);
438 
440  virtual void pushExecutingTrigger(int);
441  virtual void popExecutingTrigger();
442  virtual int executingTriggerStatementId() const;
443 
445  virtual std::vector<int> executingTriggerStatementIds() const;
446 
448  virtual DtUUID executingTriggerName() const;
449 
451  virtual std::vector<DtUUID> executingTriggerNames() const;
452 
454  virtual std::vector<DtUUID> registeredTriggerNames() const;
455 
457  virtual bool triggerIsRunning(const DtUUID&) const;
458 
460  virtual bool triggerIsRegistered(const DtUUID&) const;
461 
463  virtual void removeScheduledTriggers(const DtUUID&);
464 
466  virtual void mapRegisteredTriggersToTriggerStatements();
467 
470  virtual DtSimStatement* lookupStatementByCursor(int cursor);
471  virtual DtSimStatement* lookupStatementByStatementId(int) const;
472 
474  virtual void setContinuePlan(bool);
475 
480  virtual std::vector<DtReaderWriter*> substituteVariablesIn(DtReaderWriter*) const;
481 
483  virtual std::vector<DtReaderWriter*> substitutedValues(const DtReaderWriter*) const;
484 
486  virtual bool subsituteUUIDIfAvailable(const DtReaderWriter*, DtUUID& uuid) const;
487 
492  virtual void removeTopExecutionStack();
493 
495  virtual void addSkipTaskCallback(DtSkipTaskCallbackFcn fcn, void* usrData);
496 
498  virtual void removeSkipTaskCallback(DtSkipTaskCallbackFcn fcn, void* usrData);
499 
500  virtual void invokeSkipTaskCallbacks();
501 
502 protected:
503 
505  virtual void processAwaitingTask();
506 
509  virtual void createMainBlock();
510 
514  virtual void copyMainBlock(const DtPlan& otherPlan);
515 
519  virtual void copyAndTranslateExecutionStack(const DtPlan& otherPlan);
520 
524  virtual void copyAndTranslateTriggers(const DtPlan& otherPlan);
525 
528  virtual void curStmtChanged();
529 
532  virtual void continuePlan();
533 
540  virtual void stepStatement(bool forceStep = false);
541 
545  virtual void executeStatement();
546 
549  virtual void clearTriggerList();
550 
554  virtual void clearExecutionStack();
555 
557  virtual void emtpyExecutionStack();
558 
560 
561  virtual void mapExecutionStackToRwExecutionStack(DtRwPlanExecutionStack& rwExecutionStack);
563  virtual void mapPendingTriggersToPendingTriggerDataList();
565 
567 
568  virtual void mapOldExecutionCursorStackToExecutionStack(const DtRwIntegerList& executionCursorStack);
571  virtual void mapRwExecutionStackToExecutionStack(const DtRwPlanExecutionStack& rwExecutionStack);
572  virtual void mapPendingTriggerDataToPendingTriggers();
574 
577  virtual int statementIdToCursor(DtStmtIdType statementId);
578  virtual DtStmtIdType cursorToStatementId(int cursor);
579 
580  virtual DtSimStatement* lookupStatementByStatementId(DtSimBlock*, int, std::set<DtUUID>& triggersVisited) const;
581 
583  virtual void createTriggersFromWhenBlocks();
584  virtual void createTriggersFromWhenBlocks(DtSimBlock*);
585  virtual void createTriggersFromWhenBlocks(DtSimBlock*, DtSimStatement*);
586 
588  virtual void removeTriggerRegistrationFrom(DtSimBlock*, const DtUUID&);
589  virtual void removeTriggerRegistrationFrom(DtSimBlock*, DtSimStatement*, const DtUUID&);
590 
592  virtual void mapExecutionStackToExecutingTriggers();
593 
594 protected:
595 
602 
606 
612 
616 
620 
624 
627 
630  //DtList myStatementChangedCbs;
631 
634  //DtList myStatementTickCbs;
635 
638  //DtList myStatementSkipTaskCbs;
639 
643 
646 
650 
655 
658 
660 
662 
664 
667 
673 
677 
679 
681 };
682 
683 namespace DtBufferSerialize
684 {
687  DT_DLL_vrfplan int getSize(const DtPlan& contentPtr);
688 
692  DT_DLL_vrfplan char *encode(const DtPlan& adminContentPtr, char *buffer);
693 
697  DT_DLL_vrfplan const char *decode(DtPlan& adminContentPtr, const char *buffer);
698 }
bool operator==(const DtReaderWriter &) const
Equivalence operator.
UUID is a unique ID wrapper class.
Definition: rwUUID.h:229
DtPlanStatus myLastSentStatus
The status that was last sent out though the curretStatement callbacks.
Definition: plan.h:666
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:611
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:605
DtRwBoolean myTaskRequestPending
The TaskRequestPending flag is set to true when an Entity requests a new task, and is cleared when a ...
Definition: plan.h:601
DtList myPendingTriggers
A list of all registered DtSimTriggers.
Definition: plan.h:626
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:649
class DtRwTriggerDataList:
Definition: rwTriggerDataList.h:27
DtRwInt myOrdinal
Definition: plan.h:672
Iterator for iterating over a DtRwIntrusiveList of DtSimStatements and all its descendants (as repres...
Definition: recursiveSimBlockIterator.h:32
Description: Readable, Writable uuid string. Use this class in order to convert from object marking t...
Definition: rwUUID.h:431
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:663
bool myContinuePlan
Definition: plan.h:661
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:152
std::vector< DtFilename > SearchPaths
Definition: readerWriter.h:92
bool isExecuting
Definition: plan.h:57
DtRwUUID myPlanName
Definition: plan.h:659
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:653
DtCallbackList< const DtPlan & > myStatementChangedCbs
A list of all the DtCurrentStatementChangedCallbackFcn callbacks.
Definition: plan.h:629
DtNoArgumentCallbackList myStatementSkipTaskCbs
A list of all the DtStmtTickCallbackFcn callbacks.
Definition: plan.h:637
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:654
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:633
DtRwBoolean myLastStatementExecuted
myLastStatementExecuted makes sure that nothing will get executed in the plan after triggers have bee...
Definition: plan.h:619
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:264
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
A version of DtRwList that contains a homogeneous list of a templated RW type. The templated type spe...
Definition: rwTemplatedList.h:26
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:676
void(* DtCurrentStatementChangedCallbackFcn)(const DtPlan &plan, void *usr)
Definition: plan.h:62
DtRwIntegerList myExecutingTriggers
Definition: plan.h:678
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:623
DtRwVariableBindings myPlanVariables
Definition: plan.h:680
#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
Definition: DtTacticalGraphicUtilities.h:57
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:60
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:670
bool myAwaitingTaskFlag
Flag indicating we&#39;ve received an awaiting task request.
Definition: plan.h:657
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:645
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:615
DtRwString myQuickLaunchIcon
Definition: plan.h:671
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 Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)