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() override;
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() override;
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, bool writeUnspecified = false,
414  const DtFilename& path = DtReaderWriter::appPath()) override;
415 
419  virtual void getSelf(DtlObjPtr args, const DtReaderWriter::SearchPaths& searchPaths = DtReaderWriter::SearchPaths(),
420  const DtVariableBindingsList& variableBindings = DtReaderWriter::nullVariableReference()) override;
421 
424  virtual void addStatementChangedCallback(
425  DtCurrentStatementChangedCallbackFcn fcn, void* usrData);
426 
428  virtual void removeStatementChangedCallback(
429  DtCurrentStatementChangedCallbackFcn fcn, void* usrData);
430 
432  virtual void addTickCallback(
433  DtStmtTickCallbackFcn fcn, void* usrData);
434 
436  virtual void removeTickCallback(
437  DtStmtTickCallbackFcn fcn, void* usrData);
438 
440  virtual void reissueStatementIds(DtSimStatement* stmt);
441 
443  virtual void pushExecutingTrigger(int);
444  virtual void popExecutingTrigger();
445  virtual int executingTriggerStatementId() const;
446 
448  virtual std::vector<int> executingTriggerStatementIds() const;
449 
451  virtual DtUUID executingTriggerName() const;
452 
454  virtual std::vector<DtUUID> executingTriggerNames() const;
455 
457  virtual std::vector<DtUUID> registeredTriggerNames() const;
458 
460  virtual bool triggerIsRunning(const DtUUID&) const;
461 
463  virtual bool triggerIsRegistered(const DtUUID&) const;
464 
466  virtual void removeScheduledTriggers(const DtUUID&);
467 
469  virtual void mapRegisteredTriggersToTriggerStatements();
470 
473  virtual DtSimStatement* lookupStatementByCursor(int cursor);
474  virtual DtSimStatement* lookupStatementByStatementId(int) const;
475 
477  virtual void setContinuePlan(bool);
478 
483  virtual std::vector<DtReaderWriter*> substituteVariablesIn(DtReaderWriter*) const;
484 
486  virtual std::vector<DtReaderWriter*> substitutedValues(const DtReaderWriter*) const;
487 
489  virtual bool subsituteUUIDIfAvailable(const DtReaderWriter*, DtUUID& uuid) const;
490 
495  virtual void removeTopExecutionStack();
496 
498  virtual void addSkipTaskCallback(DtSkipTaskCallbackFcn fcn, void* usrData);
499 
501  virtual void removeSkipTaskCallback(DtSkipTaskCallbackFcn fcn, void* usrData);
502 
503  virtual void invokeSkipTaskCallbacks();
504 
505 protected:
506 
508  virtual void processAwaitingTask();
509 
512  virtual void createMainBlock();
513 
517  virtual void copyMainBlock(const DtPlan& otherPlan);
518 
522  virtual void copyAndTranslateExecutionStack(const DtPlan& otherPlan);
523 
527  virtual void copyAndTranslateTriggers(const DtPlan& otherPlan);
528 
531  virtual void curStmtChanged();
532 
535  virtual void continuePlan();
536 
543  virtual void stepStatement(bool forceStep = false);
544 
548  virtual void executeStatement();
549 
552  virtual void clearTriggerList();
553 
557  virtual void clearExecutionStack();
558 
560  virtual void emtpyExecutionStack();
561 
563 
564  virtual void mapExecutionStackToRwExecutionStack(DtRwPlanExecutionStack& rwExecutionStack);
566  virtual void mapPendingTriggersToPendingTriggerDataList();
568 
570 
571  virtual void mapOldExecutionCursorStackToExecutionStack(const DtRwIntegerList& executionCursorStack);
574  virtual void mapRwExecutionStackToExecutionStack(const DtRwPlanExecutionStack& rwExecutionStack);
575  virtual void mapPendingTriggerDataToPendingTriggers();
577 
580  virtual int statementIdToCursor(DtStmtIdType statementId);
581  virtual DtStmtIdType cursorToStatementId(int cursor);
582 
583  virtual DtSimStatement* lookupStatementByStatementId(DtSimBlock*, int, std::set<DtUUID>& triggersVisited) const;
584 
586  virtual void createTriggersFromWhenBlocks();
587  virtual void createTriggersFromWhenBlocks(DtSimBlock*);
588  virtual void createTriggersFromWhenBlocks(DtSimBlock*, DtSimStatement*);
589 
591  virtual void removeTriggerRegistrationFrom(DtSimBlock*, const DtUUID&);
592  virtual void removeTriggerRegistrationFrom(DtSimBlock*, DtSimStatement*, const DtUUID&);
593 
595  virtual void mapExecutionStackToExecutingTriggers();
596 
597 protected:
598 
605 
609 
615 
619 
623 
627 
630 
633  //DtList myStatementChangedCbs;
634 
637  //DtList myStatementTickCbs;
638 
641  //DtList myStatementSkipTaskCbs;
642 
646 
649 
653 
658 
661 
663 
665 
667 
670 
676 
680 
682 
684 };
685 
686 namespace DtBufferSerialize
687 {
690  DT_DLL_vrfplan int getSize(const DtPlan& contentPtr);
691 
695  DT_DLL_vrfplan char *encode(const DtPlan& adminContentPtr, char *buffer);
696 
700  DT_DLL_vrfplan const char *decode(DtPlan& adminContentPtr, const char *buffer);
701 }
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:669
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:614
DT_DLL_readerWriter int getSize(const DtString &val)
The number of bytes required to encode the value.
std::shared_ptr< DtSimCommandContext > DtSimCommandContextPtr
Definition: simCommandStmt.h:28
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:608
DtRwBoolean myTaskRequestPending
The TaskRequestPending flag is set to true when an Entity requests a new task, and is cleared when a ...
Definition: plan.h:604
DtList myPendingTriggers
A list of all registered DtSimTriggers.
Definition: plan.h:629
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:652
class DtRwTriggerDataList:
Definition: rwTriggerDataList.h:27
DtRwInt myOrdinal
Definition: plan.h:675
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:666
bool myContinuePlan
Definition: plan.h:664
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:662
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:656
DtCallbackList< const DtPlan & > myStatementChangedCbs
A list of all the DtCurrentStatementChangedCallbackFcn callbacks.
Definition: plan.h:632
DtNoArgumentCallbackList myStatementSkipTaskCbs
A list of all the DtStmtTickCallbackFcn callbacks.
Definition: plan.h:640
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:657
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:636
DtRwBoolean myLastStatementExecuted
myLastStatementExecuted makes sure that nothing will get executed in the plan after triggers have bee...
Definition: plan.h:622
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:679
void(* DtCurrentStatementChangedCallbackFcn)(const DtPlan &plan, void *usr)
Definition: plan.h:62
DtRwIntegerList myExecutingTriggers
Definition: plan.h:681
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:626
DtRwVariableBindings myPlanVariables
Definition: plan.h:683
#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:673
bool myAwaitingTaskFlag
Flag indicating we&#39;ve received an awaiting task request.
Definition: plan.h:660
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:648
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:618
DtRwString myQuickLaunchIcon
Definition: plan.h:674
Instances of DtRwTriggersList are lists of readable, writeable when statements (triggers) The list co...
Definition: rwTriggersList.h:21
bool isComplete
Definition: plan.h:56

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)