VR-Forces 4.8 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 DtStatement;
33 class DtSimTask;
34 class DtSetDataRequest;
36 class DtSimTrigger;
37 class DtSimBlock;
38 class DtSimCommand;
39 class DtPlanBlock;
40 class DtTriggerBlock;
41 class DtSimMessage;
44 class DtPlanExecutor;
45 class DtSimCondExpr;
47 class DtRwPlanVariable;
48 
51 {
52 public:
53  DtPlanStatus();
54  bool operator==(const DtPlanStatus& orig) const;
55  bool operator!=(const DtPlanStatus& orig) const;
56 
57  std::vector<int> executingTriggerStatementIds;
58  std::vector<DtUUID> executingTriggerNames;
59  std::vector<DtUUID> registeredTriggerNames;
61  bool isComplete;
64 };
65 
67  (const DtPlan& plan, void* usr);
68 
69 typedef void (*DtPlanCallbackFcn)
70  (const DtUUID& name, const std::vector<DtSimStatement*>& statements, bool append,
71  void* usr);
72 
73 typedef void (*DtPlanStatementCallbackFcn)
74  (const DtUUID& name, DtPlanStatus planStatus, void* usr);
75 
76 typedef void (*DtPlanCompleteCallbackFcn)
77  (const DtUUID& name, void* usr);
78 
80  (DtIfMultiplePlanResponse*, void* usr);
81 
91 {
92 public:
94  {
95  None = 0,
96  IsQuickLaunch = 0x00000001,
97  ShowOnQuickLaunchToolbar = 0x00000002,
98  Launched = 0x00000004
99  };
100 
107  DtPlan();
108 
114  DtPlan(const DtUUID& planName,
115  DtPlanExecutor* planExecutor,
116  const DtString& name = "Plan",
117  DtReaderWriterRegistry* parentRegistry = NULL);
118 
122 
126  DtPlan(const DtString& name, const DtUUID& planName,
127  const DtPlan& orig, DtReaderWriterRegistry* parentRegistry = NULL);
128 
130  virtual ~DtPlan();
131 
133  virtual void init();
134 
136  virtual void addVariables();
137 
140  virtual DtPlan* clone(const DtString& name,
141  const DtUUID& planName,
142  DtReaderWriterRegistry* parentRegistry = NULL) const;
143 
148  DtPlan& operator=(const DtPlan& orig);
149 
151  virtual bool operator==(const DtPlan& orig) const;
152 
153  virtual const DtUUID& planName() const;
154  virtual void setPlanName(const DtUUID& name);
155  virtual bool planNameSpecified() const;
156 
161  virtual void setIsQuickLaunch(bool);
162  virtual bool isQuickLaunch() const;
163 
165  virtual void setShowOnQuickLaunchToolbar(bool);
166  virtual bool showOnQuickLaunchToolbar() const;
167 
171  virtual void setIsLaunched(bool);
172  virtual bool isLaunched() const;
173 
175  virtual void setQuickLaunchIcon(const DtString&);
176  virtual const DtString& quickLaunchIcon() const;
177 
179  virtual void setOrdinal(int);
180  virtual int ordinal() const;
181 
183  //virtual DtSimManager* simManager() const;
184 
185  virtual void setPlanExecutor(DtPlanExecutor* planExecutor);
186  virtual DtPlanExecutor* planExecutor() const;
187 
190  virtual void enableExecutionState();
191  virtual void disableExecutionState();
192  virtual bool executionState() const;
193 
196  virtual void awaitingTask();
197 
199  virtual bool isAwatingTask() const;
200 
202  virtual void addTrigger(const DtTriggerStmt&);
203 
205  virtual DtTriggerStmt* triggerStatement(const DtUUID&) const;
206 
209  virtual void removeTrigger(const DtUUID&);
210 
212  virtual void renameTrigger(const DtUUID&, const DtString& newName);
213 
215  virtual void updateTrigger(const DtTriggerStmt*);
216 
218  virtual void setTriggers(const DtRwTriggersList&);
219 
221  const DtRwTriggersList& triggers() const { return myTriggers; };
222 
228  virtual void pushExecutionStack();
229 
232  virtual void suspendExecutionStack();
233 
241  virtual void popExecutionStack(bool forceStep = false);
242 
245  virtual void executeTrigger(DtTriggerBlock* whenBlock);
246 
248  virtual void executeBlock(DtSimBlock* block);
249 
251  virtual bool taskRequestPending() const;
252 
254  virtual void setTaskRequestPending(bool newValue = true);
255 
257  const DtRwVariableBindings& variables() const { return myPlanVariables; };
258 
259  virtual DtReaderWriter* variable(const DtString&);
260 
263  virtual void clearVariables();
264 
266  virtual void addVariable(DtRwPlanVariable*);
267 
269  virtual void setVariables(const DtRwVariableBindings&);
270 
274  virtual bool executeTask(const DtSimTask& taskToSend) const;
275 
279  virtual bool executeSetDataRequest(
280  const DtSetDataRequest& setToSend) const;
281 
287  virtual bool executeSimCommand(const DtSimCommand& command, DtSimCommandContextPtr& context) const;
288 
291  virtual bool isSimCommandComplete(const DtSimCommand& command, const DtSimCommandContextPtr& context) const;
292 
295  virtual bool evaluateConditional(const DtSimCondExpr* condExpr) const;
296 
298  virtual DtStmtIndex firstStmt() const;
299 
301  virtual DtPlanBlock* mainBlock() const;
302 
304  virtual void empty();
305 
307  virtual bool isEmpty() const;
308 
310  virtual DtList* triggerList();
311  virtual const DtList* triggerList() const;
312 
314  virtual void addTriggerToExecute(DtSimTrigger* trigger);
316  virtual void removeTriggerFromPendingExecution(DtSimTrigger* trigger);
317 
319  virtual DtList* executionStack();
320  virtual const DtList* executionStack() const;
321 
324  virtual bool validatePlan();
325 
329  virtual const DtStmtIndex& currentStmt() const;
331  virtual void setCurrentStmt(const DtStmtIndex& nextStatement);
332 
334  virtual void setCurrentStatementExecutionId(int id);
335 
337  virtual bool isComplete() const;
338 
341  virtual void setIsComplete(bool completeFlag = true);
342 
345  virtual void setLastStatementExecuted(bool);
346  virtual bool lastStatementExecuted() const;
348 
351  virtual bool isAbandoned() const;
354  virtual void setIsAbandoned(bool v);
355 
357  virtual bool isExecuting() const;
358 
360  virtual DtPlanStatus currentStatus() const;
361 
363  virtual void reset();
364 
369  virtual void abandonPlan(bool sendWaitTask);
370 
374  virtual void restartPlan(bool sendWaitTask = true);
375 
380  virtual bool translateIndex(DtStmtIndex& stmtIndex) const;
381 
385  virtual void translateIndices(DtList& stmtIndexList) const;
386 
388  virtual void tick();
389 
393  virtual void mergeEditedPlanWith(const DtPlan& oldPlan);
394 
397  virtual DtRecursiveSimBlockIterator* spawnRecursiveIterator() const;
398 
402  virtual void putSelf(std::string& fp, int indentLevel = 0,
403  bool writeUnspecified = false, const DtFilename& path = DtReaderWriter::appPath());
404 
408  virtual void getSelf(DtlObjPtr args,
411 
414  virtual void addStatementChangedCallback(
415  DtCurrentStatementChangedCallbackFcn fcn, void* usrData);
416 
418  virtual void removeStatementChangedCallback(
419  DtCurrentStatementChangedCallbackFcn fcn, void* usrData);
420 
422  virtual void reissueStatementIds(DtSimStatement* stmt);
423 
425  virtual void pushExecutingTrigger(int);
426  virtual void popExecutingTrigger();
427  virtual int executingTriggerStatementId() const;
428 
430  virtual std::vector<int> executingTriggerStatementIds() const;
431 
433  virtual DtUUID executingTriggerName() const;
434 
436  virtual std::vector<DtUUID> executingTriggerNames() const;
437 
439  virtual std::vector<DtUUID> registeredTriggerNames() const;
440 
442  virtual bool triggerIsRunning(const DtUUID&) const;
443 
445  virtual bool triggerIsRegistered(const DtUUID&) const;
446 
448  virtual void removeScheduledTriggers(const DtUUID&);
449 
451  virtual void mapRegisteredTriggersToTriggerStatements();
452 
455  virtual DtSimStatement* lookupStatementByCursor(int cursor);
456  virtual DtSimStatement* lookupStatementByStatementId(int) const;
457 
459  virtual void setContinuePlan(bool);
460 
465  virtual std::vector<DtReaderWriter*> substituteVariablesIn(DtReaderWriter*) const;
466 
468  virtual std::vector<DtReaderWriter*> substitutedValues(const DtReaderWriter*) const;
469 
471  virtual bool subsituteUUIDIfAvailable(const DtReaderWriter*, DtUUID& uuid) const;
472 
473 protected:
474 
476  virtual void processAwaitingTask();
477 
480  virtual void createMainBlock();
481 
485  virtual void copyMainBlock(const DtPlan& otherPlan);
486 
490  virtual void copyAndTranslateExecutionStack(const DtPlan& otherPlan);
491 
495  virtual void copyAndTranslateTriggers(const DtPlan& otherPlan);
496 
499  virtual void curStmtChanged();
500 
503  virtual void continuePlan();
504 
511  virtual void stepStatement(bool forceStep = false);
512 
516  virtual void executeStatement();
517 
520  virtual void clearTriggerList();
521 
525  virtual void clearExecutionStack();
526 
528  virtual void emtpyExecutionStack();
529 
531 
532  virtual void mapExecutionStackToRwExecutionStack(DtRwPlanExecutionStack& rwExecutionStack);
534  virtual void mapPendingTriggersToPendingTriggerDataList();
536 
538 
539  virtual void mapOldExecutionCursorStackToExecutionStack(const DtRwIntegerList& executionCursorStack);
542  virtual void mapRwExecutionStackToExecutionStack(const DtRwPlanExecutionStack& rwExecutionStack);
543  virtual void mapPendingTriggerDataToPendingTriggers();
545 
548  virtual int statementIdToCursor(DtStmtIdType statementId);
549  virtual DtStmtIdType cursorToStatementId(int cursor);
550 
551  virtual DtSimStatement* lookupStatementByStatementId(DtSimBlock*, int, std::set<DtUUID>& triggersVisited) const;
552 
554  virtual void createTriggersFromWhenBlocks();
555  virtual void createTriggersFromWhenBlocks(DtSimBlock*);
556  virtual void createTriggersFromWhenBlocks(DtSimBlock*, DtSimStatement*);
557 
559  virtual void removeTriggerRegistrationFrom(DtSimBlock*, const DtUUID&);
560  virtual void removeTriggerRegistrationFrom(DtSimBlock*, DtSimStatement*, const DtUUID&);
561 
563  virtual void mapExecutionStackToExecutingTriggers();
564 
565 protected:
566 
573 
577 
583 
587 
591 
595 
598 
601  //DtList myStatementChangedCbs;
602 
606 
609 
613 
618 
621 
623 
625 
627 
630 
636 
638 
640 };
641 
642 namespace DtBufferSerialize
643 {
646  DT_DLL_vrfplan int getSize(const DtPlan& contentPtr);
647 
651  DT_DLL_vrfplan char *encode(const DtPlan& adminContentPtr, char *buffer);
652 
656  DT_DLL_vrfplan const char *decode(DtPlan& adminContentPtr, const char *buffer);
657 }
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:629
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:582
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:576
DtRwBoolean myTaskRequestPending
The TaskRequestPending flag is set to true when an Entity requests a new task, and is cleared when a ...
Definition: plan.h:572
DtList myPendingTriggers
A list of all registered DtSimTriggers.
Definition: plan.h:597
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:63
const DtRwTriggersList & triggers() const
Returns plans triggers.
Definition: plan.h:221
DtRwTriggersList myTriggers
List of all possible triggers in the plan.
Definition: plan.h:612
class DtRwTriggerDataList:
Definition: rwTriggerDataList.h:27
DtRwInt myOrdinal
Definition: plan.h:635
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:29
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:626
bool myContinuePlan
Definition: plan.h:624
File: simMsg.h.
Definition: simMessage.h:35
Description: Readable, Writable int.
Definition: rwInt.h:25
std::vector< int > executingTriggerStatementIds
Definition: plan.h:57
void(* DtPlanCallbackFcn)(const DtUUID &name, const std::vector< DtSimStatement * > &statements, bool append, void *usr)
Definition: plan.h:70
std::vector< DtFilename > SearchPaths
Definition: readerWriter.h:92
bool isExecuting
Definition: plan.h:62
DtRwUUID myPlanName
Definition: plan.h:622
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:616
DtCallbackList< const DtPlan & > myStatementChangedCbs
A list of all the DtCurrentStatementChangedCallbackFcn callbacks.
Definition: plan.h:600
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:80
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:90
void(* DtPlanStatementCallbackFcn)(const DtUUID &name, DtPlanStatus planStatus, void *usr)
Definition: plan.h:74
DtSimCondExpr is an abstract base class representing various Conditional Expressions used by the Plan...
Definition: simCondExpr.h:49
bool myWantsExecutionStateEnabled
Definition: plan.h:617
Small container class that holds the status of a running DtPlan.
Definition: plan.h:50
static const DtVariableBindingsList & nullVariableReference()
class DtIfMultiplePlanResponse:
Definition: ifMultiplePlanResponse.h:32
DtRwBoolean myLastStatementExecuted
myLastStatementExecuted makes sure that nothing will get executed in the plan after triggers have bee...
Definition: plan.h:590
QuickLaunchFlags
Definition: plan.h:93
Description: Readable, Writable bool.
Definition: rwBoolean.h:26
class DtSimTrigger:
Definition: simTrigger.h:28
const DtRwVariableBindings & variables() const
Returns plan variables.
Definition: plan.h:257
The DtRwPlanVariable is a base class that minimally implements a plan variable.
Definition: rwPlanVariable.h:18
class DtSimStatement:
Definition: simStatement.h:41
std::vector< DtUUID > registeredTriggerNames
Definition: plan.h:59
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:33
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
void(* DtCurrentStatementChangedCallbackFcn)(const DtPlan &plan, void *usr)
Definition: plan.h:67
DtRwIntegerList myExecutingTriggers
Definition: plan.h:637
DtRwBoolean myAbandoned
True if this plan has been abandoned.
Definition: plan.h:594
DtRwVariableBindings myPlanVariables
Definition: plan.h:639
#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)
Definition: simInterfaceContent.h:45
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:77
DtRwInt myQuickLaunchFlags
Additional data used to indicate if this is a quick launch plan and the icon associated with it...
Definition: plan.h:633
bool myAwaitingTaskFlag
Flag indicating we&#39;ve received an awaiting task request.
Definition: plan.h:620
std::vector< DtUUID > executingTriggerNames
Definition: plan.h:58
DtRwTriggerDataList myPendingTriggerDataList
Reader-writer members used to hold checkpoint information about the plan.
Definition: plan.h:608
static const DtFilename & appPath()
Gets the current working directory.
int currentStatementId
Definition: plan.h:60
DtRwBoolean myIsComplete
myIsComplete Disables awaitingTask() and causes it to emit continuous Wait tasks. ...
Definition: plan.h:586
DtRwString myQuickLaunchIcon
Definition: plan.h:634
Instances of DtRwTriggersList are lists of readable, writeable when statements (triggers) The list co...
Definition: rwTriggersList.h:21
Definition: vrfMessageInterface.h:46
bool isComplete
Definition: plan.h:61
DtBoost::shared_ptr< DtSimCommandContext > DtSimCommandContextPtr
Definition: simCommandStmt.h:28

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)