VR-Forces 4.10 Class Documentation
 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 
92 {
93 public:
95  {
96  None = 0,
97  IsQuickLaunch = 0x00000001,
98  ShowOnQuickLaunchToolbar = 0x00000002,
99  Launched = 0x00000004
100  };
101 
108  DtPlan();
109 
115  DtPlan(const DtUUID& planName,
116  DtPlanExecutor* planExecutor,
117  const DtString& name = "Plan",
118  DtReaderWriterRegistry* parentRegistry = NULL);
119 
123 
127  DtPlan(const DtString& name, const DtUUID& planName,
128  const DtPlan& orig, DtReaderWriterRegistry* parentRegistry = NULL);
129 
131  virtual ~DtPlan();
132 
134  virtual void init();
135 
137  virtual void addVariables();
138 
141  virtual DtPlan* clone(const DtString& name,
142  const DtUUID& planName,
143  DtReaderWriterRegistry* parentRegistry = NULL) const;
144 
149  DtPlan& operator=(const DtPlan& orig);
150 
152  virtual bool operator==(const DtPlan& orig) const;
153 
154  virtual const DtUUID& planName() const;
155  virtual void setPlanName(const DtUUID& name);
156  virtual bool planNameSpecified() const;
157 
162  virtual void setIsQuickLaunch(bool);
163  virtual bool isQuickLaunch() const;
164 
166  virtual void setShowOnQuickLaunchToolbar(bool);
167  virtual bool showOnQuickLaunchToolbar() const;
168 
172  virtual void setIsLaunched(bool);
173  virtual bool isLaunched() const;
174 
176  virtual void setQuickLaunchIcon(const DtString&);
177  virtual const DtString& quickLaunchIcon() const;
178 
180  virtual void setOrdinal(int);
181  virtual int ordinal() const;
182 
184  //virtual DtSimManager* simManager() const;
185 
186  virtual void setPlanExecutor(DtPlanExecutor* planExecutor);
187  virtual DtPlanExecutor* planExecutor() const;
188 
191  virtual void enableExecutionState();
192  virtual void disableExecutionState();
193  virtual bool executionState() const;
194 
197  virtual void awaitingTask();
198 
200  virtual bool isAwatingTask() const;
201 
203  virtual void addTrigger(const DtTriggerStmt&);
204 
206  virtual DtTriggerStmt* triggerStatement(const DtUUID&) const;
207 
210  virtual void removeTrigger(const DtUUID&);
211 
213  virtual void renameTrigger(const DtUUID&, const DtString& newName);
214 
216  virtual void updateTrigger(const DtTriggerStmt*);
217 
219  virtual void setTriggers(const DtRwTriggersList&);
220 
222  const DtRwTriggersList& triggers() const { return myTriggers; };
223 
229  virtual void pushExecutionStack();
230 
233  virtual void suspendExecutionStack();
234 
242  virtual void popExecutionStack(bool forceStep = false);
243 
246  virtual void executeTrigger(DtTriggerBlock* whenBlock);
247 
249  virtual void executeBlock(DtSimBlock* block);
250 
252  virtual bool taskRequestPending() const;
253 
255  virtual void setTaskRequestPending(bool newValue = true);
256 
258  const DtRwVariableBindings& variables() const { return myPlanVariables; };
259 
260  virtual DtReaderWriter* variable(const DtString&);
261 
264  virtual void clearVariables();
265 
267  virtual void addVariable(DtRwPlanVariable*);
268 
270  virtual void setVariables(const DtRwVariableBindings&);
271 
275  virtual bool executeTask(const DtSimTask& taskToSend) const;
276 
280  virtual bool executeSetDataRequest(
281  const DtSetDataRequest& setToSend) const;
282 
288  virtual bool executeSimCommand(const DtSimCommand& command, DtSimCommandContextPtr& context) const;
289 
292  virtual bool isSimCommandComplete(const DtSimCommand& command, const DtSimCommandContextPtr& context) const;
293 
296  virtual bool evaluateConditional(const DtSimCondExpr* condExpr) const;
297 
299  virtual DtStmtIndex firstStmt() const;
300 
302  virtual DtPlanBlock* mainBlock() const;
303 
305  virtual void empty();
306 
308  virtual bool isEmpty() const;
309 
311  virtual DtList* triggerList();
312  virtual const DtList* triggerList() const;
313 
315  virtual void addTriggerToExecute(DtSimTrigger* trigger);
317  virtual void removeTriggerFromPendingExecution(DtSimTrigger* trigger);
318 
320  virtual DtList* executionStack();
321  virtual const DtList* executionStack() const;
322 
325  virtual bool validatePlan();
326 
330  virtual const DtStmtIndex& currentStmt() const;
332  virtual void setCurrentStmt(const DtStmtIndex& nextStatement);
333 
335  virtual void setCurrentStatementExecutionId(int id);
336 
338  virtual bool isComplete() const;
339 
342  virtual void setIsComplete(bool completeFlag = true);
343 
346  virtual void setLastStatementExecuted(bool);
347  virtual bool lastStatementExecuted() const;
349 
352  virtual bool isAbandoned() const;
355  virtual void setIsAbandoned(bool v);
356 
358  virtual bool isExecuting() const;
359 
361  virtual DtPlanStatus currentStatus() const;
362 
364  virtual void reset();
365 
370  virtual void abandonPlan(bool sendWaitTask);
371 
375  virtual void restartPlan(bool sendWaitTask = true);
376 
381  virtual bool translateIndex(DtStmtIndex& stmtIndex) const;
382 
386  virtual void translateIndices(DtList& stmtIndexList) const;
387 
389  virtual void tick();
390 
394  virtual void mergeEditedPlanWith(const DtPlan& oldPlan);
395 
398  virtual DtRecursiveSimBlockIterator* spawnRecursiveIterator() const;
399 
403  virtual void putSelf(std::string& fp, int indentLevel = 0,
404  bool writeUnspecified = false, const DtFilename& path = DtReaderWriter::appPath());
405 
409  virtual void getSelf(DtlObjPtr args,
412 
415  virtual void addStatementChangedCallback(
416  DtCurrentStatementChangedCallbackFcn fcn, void* usrData);
417 
419  virtual void removeStatementChangedCallback(
420  DtCurrentStatementChangedCallbackFcn fcn, void* usrData);
421 
423  virtual void addTickCallback(
424  DtStmtTickCallbackFcn fcn, void* usrData);
425 
427  virtual void removeTickCallback(
428  DtStmtTickCallbackFcn fcn, void* usrData);
429 
431  virtual void reissueStatementIds(DtSimStatement* stmt);
432 
434  virtual void pushExecutingTrigger(int);
435  virtual void popExecutingTrigger();
436  virtual int executingTriggerStatementId() const;
437 
439  virtual std::vector<int> executingTriggerStatementIds() const;
440 
442  virtual DtUUID executingTriggerName() const;
443 
445  virtual std::vector<DtUUID> executingTriggerNames() const;
446 
448  virtual std::vector<DtUUID> registeredTriggerNames() const;
449 
451  virtual bool triggerIsRunning(const DtUUID&) const;
452 
454  virtual bool triggerIsRegistered(const DtUUID&) const;
455 
457  virtual void removeScheduledTriggers(const DtUUID&);
458 
460  virtual void mapRegisteredTriggersToTriggerStatements();
461 
464  virtual DtSimStatement* lookupStatementByCursor(int cursor);
465  virtual DtSimStatement* lookupStatementByStatementId(int) const;
466 
468  virtual void setContinuePlan(bool);
469 
474  virtual std::vector<DtReaderWriter*> substituteVariablesIn(DtReaderWriter*) const;
475 
477  virtual std::vector<DtReaderWriter*> substitutedValues(const DtReaderWriter*) const;
478 
480  virtual bool subsituteUUIDIfAvailable(const DtReaderWriter*, DtUUID& uuid) const;
481 
486  virtual void removeTopExecutionStack();
487 
489  virtual void addSkipTaskCallback(DtSkipTaskCallbackFcn fcn, void* usrData);
490 
492  virtual void removeSkipTaskCallback(DtSkipTaskCallbackFcn fcn, void* usrData);
493 
494  virtual void invokeSkipTaskCallbacks();
495 
496 protected:
497 
499  virtual void processAwaitingTask();
500 
503  virtual void createMainBlock();
504 
508  virtual void copyMainBlock(const DtPlan& otherPlan);
509 
513  virtual void copyAndTranslateExecutionStack(const DtPlan& otherPlan);
514 
518  virtual void copyAndTranslateTriggers(const DtPlan& otherPlan);
519 
522  virtual void curStmtChanged();
523 
526  virtual void continuePlan();
527 
534  virtual void stepStatement(bool forceStep = false);
535 
539  virtual void executeStatement();
540 
543  virtual void clearTriggerList();
544 
548  virtual void clearExecutionStack();
549 
551  virtual void emtpyExecutionStack();
552 
554 
555  virtual void mapExecutionStackToRwExecutionStack(DtRwPlanExecutionStack& rwExecutionStack);
557  virtual void mapPendingTriggersToPendingTriggerDataList();
559 
561 
562  virtual void mapOldExecutionCursorStackToExecutionStack(const DtRwIntegerList& executionCursorStack);
565  virtual void mapRwExecutionStackToExecutionStack(const DtRwPlanExecutionStack& rwExecutionStack);
566  virtual void mapPendingTriggerDataToPendingTriggers();
568 
571  virtual int statementIdToCursor(DtStmtIdType statementId);
572  virtual DtStmtIdType cursorToStatementId(int cursor);
573 
574  virtual DtSimStatement* lookupStatementByStatementId(DtSimBlock*, int, std::set<DtUUID>& triggersVisited) const;
575 
577  virtual void createTriggersFromWhenBlocks();
578  virtual void createTriggersFromWhenBlocks(DtSimBlock*);
579  virtual void createTriggersFromWhenBlocks(DtSimBlock*, DtSimStatement*);
580 
582  virtual void removeTriggerRegistrationFrom(DtSimBlock*, const DtUUID&);
583  virtual void removeTriggerRegistrationFrom(DtSimBlock*, DtSimStatement*, const DtUUID&);
584 
586  virtual void mapExecutionStackToExecutingTriggers();
587 
588 protected:
589 
596 
600 
606 
610 
614 
618 
621 
624  //DtList myStatementChangedCbs;
625 
628  //DtList myStatementTickCbs;
629 
632  //DtList myStatementSkipTaskCbs;
633 
637 
640 
644 
649 
652 
654 
656 
658 
661 
667 
669 
671 };
672 
673 namespace DtBufferSerialize
674 {
677  DT_DLL_vrfplan int getSize(const DtPlan& contentPtr);
678 
682  DT_DLL_vrfplan char *encode(const DtPlan& adminContentPtr, char *buffer);
683 
687  DT_DLL_vrfplan const char *decode(DtPlan& adminContentPtr, const char *buffer);
688 }
bool operator==(const DtReaderWriter &) const
Equivalence operator.
UUID is a unique ID wrapper class.
Definition: rwUUID.h:222
DtPlanStatus myLastSentStatus
The status that was last sent out though the curretStatement callbacks.
Definition: plan.h:660
class DtPlanBlock:
Definition: planBlock.h:22
An abstract interface for the execution of a plan.
Definition: planExecutor.h:32
DtList myExecutionStack
The top of the execution stack is the Plan&#39;s current statement (fetched with currentStmt()).
Definition: plan.h:605
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:599
DtRwBoolean myTaskRequestPending
The TaskRequestPending flag is set to true when an Entity requests a new task, and is cleared when a ...
Definition: plan.h:595
DtList myPendingTriggers
A list of all registered DtSimTriggers.
Definition: plan.h:620
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
bool isAbandoned
Definition: plan.h:58
const DtRwTriggersList & triggers() const
Returns plans triggers.
Definition: plan.h:222
DtRwTriggersList myTriggers
List of all possible triggers in the plan.
Definition: plan.h:643
class DtRwTriggerDataList:
Definition: rwTriggerDataList.h:27
DtRwInt myOrdinal
Definition: plan.h:666
Iterator for iterating over a DtRwIntrusiveList of DtSimStatements and all its descendants (as repres...
Definition: recursiveSimBlockIterator.h:32
Description: Readable, Writable uuid string.
Definition: rwUUID.h:419
ReaderWriter object that maintains a list of reader-writer variable bindings.
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.
Definition: setDataRequest.h:40
Instances of DtRwIntegerList are lists of readable, writeable integers (DtRwInts).
Definition: rwIntegerList.h:19
std::list< const DtRwVariableBindings * > DtVariableBindingsList
Definition: readerWriterRegistry.h:29
DtPlanExecutor * myPlanExecutor
Definition: plan.h:657
bool myContinuePlan
Definition: plan.h:655
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:653
void(* DtStmtTickCallbackFcn)(DtPlan &plan, void *usr)
Definition: plan.h:65
DtSimCommand is an abstract base class from which commands can derive.
Definition: simCommand.h:32
DT_DLL_readerWriter char * encode(const DtFilename &val, char *buffer)
Serializes the provided value val into buffer.
bool myExecutionIsEnabled
Flag indication whether execution is enabled (can we start or advance through plan statements...
Definition: plan.h:647
DtCallbackList< const DtPlan & > myStatementChangedCbs
A list of all the DtCurrentStatementChangedCallbackFcn callbacks.
Definition: plan.h:623
DtNoArgumentCallbackList myStatementSkipTaskCbs
A list of all the DtStmtTickCallbackFcn callbacks.
Definition: plan.h:631
virtual void getSelf(DtlObjPtr args, const DtReaderWriter::SearchPaths &searchPaths=SearchPaths(), const DtVariableBindingsList &variableBindings=nullVariableReference())
Top level to read itself from an input stream.
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.
class DtTriggerBlock:
Definition: triggerBlock.h:26
class DtPlan:
Definition: plan.h:91
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:49
bool myWantsExecutionStateEnabled
Definition: plan.h:648
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:627
DtRwBoolean myLastStatementExecuted
myLastStatementExecuted makes sure that nothing will get executed in the plan after triggers have bee...
Definition: plan.h:613
QuickLaunchFlags
Definition: plan.h:94
Description: Readable, Writable bool.
Definition: rwBoolean.h:26
class DtSimTrigger:
Definition: simTrigger.h:28
const DtRwVariableBindings & variables() const
Returns plan variables.
Definition: plan.h:258
The DtRwPlanVariable is a base class that minimally implements a plan variable.
Definition: rwPlanVariable.h:18
class DtSimStatement:
Definition: simStatement.h:35
std::vector< DtUUID > registeredTriggerNames
Definition: plan.h:54
A version of DtRwList that contains a homogeneous list of a templated RW type.
Definition: rwTemplatedList.h:26
DtSimTask is an abstract base class from which real tasks can derive.
Definition: simTask.h:31
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
void(* DtCurrentStatementChangedCallbackFcn)(const DtPlan &plan, void *usr)
Definition: plan.h:62
DtRwIntegerList myExecutingTriggers
Definition: plan.h:668
void(* DtSkipTaskCallbackFcn)(void *usr)
Definition: plan.h:68
DtRwBoolean myAbandoned
True if this plan has been abandoned.
Definition: plan.h:617
DtRwVariableBindings myPlanVariables
Definition: plan.h:670
#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:58
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:664
bool myAwaitingTaskFlag
Flag indicating we&#39;ve received an awaiting task request.
Definition: plan.h:651
std::vector< DtUUID > executingTriggerNames
Definition: plan.h:53
DtRwTriggerDataList myPendingTriggerDataList
Reader-writer members used to hold checkpoint information about the plan.
Definition: plan.h:639
static const DtFilename & appPath()
Gets the current working directory.
int currentStatementId
Definition: plan.h:55
DtRwBoolean myIsComplete
myIsComplete Disables awaitingTask() and causes it to emit continuous Wait tasks. ...
Definition: plan.h:609
DtRwString myQuickLaunchIcon
Definition: plan.h:665
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 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)