![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 1999 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: plan.h,v $ $Revision: 1.50 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef DtPlan_H_ 00013 #define DtPlan_H_ 00014 00015 class DtPlan; 00016 00017 #include <vlutil/vlString.h> 00018 #include <vlutil/vlList.h> 00019 #include "vrfutil/rwString.h" 00020 #include "vrfutil/rdrWritr.h" 00021 #include "vrfplan/stmtIndex.h" 00022 #include <vl/hostStructs.h> 00023 #include "vrfutil/rwBoolean.h" 00024 #include "vrfutil/rwIntegerList.h" 00025 #include "vrfplan/rwTriggerDataList.h" 00026 #include "vrfplan/rwPlanExecutionStack.h" 00027 #include "vrfutil/callbackList.h" 00028 #include "vrfplan/vrfplanDefines.h" 00029 00030 class DtStatement; 00031 class DtSimTask; 00032 class DtSetDataRequest; 00033 class DtSimInterfaceContent; 00034 class DtSimTrigger; 00035 class DtSimBlock; 00036 class DtSimCommand; 00037 class DtPlanBlock; 00038 class DtWhenBlock; 00039 class DtSimMessage; 00040 class DtRecursiveSimBlockIterator; 00041 class DtVrfMessageInterface; 00042 class DtPlanExecutor; 00043 class DtSimCondExpr; 00044 class DtIfMultiplePlanResponse; 00045 00047 class DT_DLL_vrfplan DtPlanStatus 00048 { 00049 public: 00050 DtPlanStatus(); 00051 bool operator==(const DtPlanStatus& orig) const; 00052 bool operator!=(const DtPlanStatus& orig) const; 00053 00054 00055 int currentStatementId; 00056 bool isComplete; 00057 bool isExecuting; 00058 bool isAbandoned; 00059 }; 00060 00061 typedef void (*DtCurrentStatementChangedCallbackFcn) 00062 (const DtPlan& plan, void* usr); 00063 00064 typedef void (*DtPlanCallbackFcn) 00065 (const DtString& name, const DtList& statements, bool append, 00066 void* usr); 00067 00068 typedef void (*DtPlanStatementCallbackFcn) 00069 (const DtString& name, DtPlanStatus planStatus, void* usr); 00070 00071 typedef void (*DtPlanCompleteCallbackFcn) 00072 (const DtString& name, void* usr); 00073 00074 typedef void (*DtMultiplePlanRequestCallbackFcn) 00075 (DtIfMultiplePlanResponse*, void* usr); 00076 00085 class DT_DLL_vrfplan DtPlan : public DtReaderWriter 00086 { 00087 public: 00088 00095 DtPlan(); 00096 00102 DtPlan(const DtString& planName, 00103 DtPlanExecutor* planExecutor, 00104 const DtString& name = "Plan", 00105 DtReaderWriterRegistry* parentRegistry = NULL); 00106 00110 00114 DtPlan(const DtString& name, const DtString& planName, 00115 const DtPlan& orig, DtReaderWriterRegistry* parentRegistry = NULL); 00116 00118 virtual ~DtPlan(); 00119 00121 virtual void init(); 00122 00125 virtual DtPlan* clone(const DtString& name, 00126 const DtString& planName, 00127 DtReaderWriterRegistry* parentRegistry = NULL) const; 00128 00133 DtPlan& operator=(const DtPlan& orig); 00134 00136 virtual bool operator==(const DtPlan& orig) const; 00137 00138 virtual DtString planName() const; 00139 virtual void setPlanName(const DtString& name); 00140 00142 virtual const DtString& objectName() const; 00143 virtual void setObjectName(const DtString& objectName); 00145 virtual bool objectNameSpecified() const; 00146 00148 //virtual DtSimManager* simManager() const; 00149 00150 virtual void setPlanExecutor(DtPlanExecutor* planExecutor); 00151 virtual DtPlanExecutor* planExecutor() const; 00152 00155 virtual void enableExecutionState(); 00156 virtual void disableExecutionState(); 00157 virtual bool executionState() const; 00158 00161 virtual void awaitingTask(); 00162 00164 virtual bool isAwatingTask() const; 00165 00171 virtual void pushExecutionStack(); 00172 00180 virtual void popExecutionStack(bool forceStep = false); 00181 00184 virtual void executeTrigger(DtWhenBlock* whenBlock); 00185 00187 virtual void executeBlock(DtSimBlock* block); 00188 00190 virtual bool taskRequestPending() const; 00191 00193 virtual void setTaskRequestPending(bool newValue = true); 00194 00198 virtual bool executeTask(const DtSimTask& taskToSend) const; 00199 00203 virtual bool executeSetDataRequest( 00204 const DtSetDataRequest& setToSend) const; 00205 00209 virtual bool executeSimCommand(const DtSimCommand& command) const; 00210 00213 virtual bool evaluateConditional(const DtSimCondExpr* condExpr) const; 00214 00216 virtual DtStmtIndex firstStmt() const; 00217 00219 virtual DtPlanBlock* mainBlock() const; 00220 00222 virtual bool isEmpty() const; 00223 00225 virtual DtList* triggerList(); 00226 virtual const DtList* triggerList() const; 00227 00229 virtual void addTrigger(DtSimTrigger* trigger); 00231 virtual void removeTrigger(DtSimTrigger* trigger); 00232 00234 virtual DtList* executionStack(); 00235 virtual const DtList* executionStack() const; 00236 00239 virtual bool validatePlan(); 00240 00244 virtual const DtStmtIndex& currentStmt() const; 00246 virtual void setCurrentStmt(const DtStmtIndex& nextStatement); 00247 00249 virtual void setCurrentStatementExecutionId(int id); 00250 00252 virtual bool isComplete() const; 00255 virtual void setIsComplete(bool completeFlag = true); 00256 00259 virtual bool isAbandoned() const; 00262 virtual void setIsAbandoned(bool v); 00263 00265 virtual bool isExecuting() const; 00266 00268 virtual DtPlanStatus currentStatus() const; 00269 00271 virtual void reset(); 00272 00277 virtual void abandonPlan(bool sendWaitTask); 00278 00282 virtual void restartPlan(bool sendWaitTask = true); 00283 00288 virtual bool translateIndex(DtStmtIndex& stmtIndex) const; 00289 00293 virtual void translateIndices(DtList& stmtIndexList) const; 00294 00296 virtual void tick(); 00297 00301 virtual void mergeEditedPlanWith(const DtPlan& oldPlan); 00302 00305 virtual DtRecursiveSimBlockIterator* spawnRecursiveIterator() const; 00306 00310 virtual void putSelf(FILE *fp, int indentLevel = 0, 00311 bool writeUnspecified = false, const DtFilename& path = DtReaderWriter::appPath()); 00312 00316 virtual void getSelf(DtlObjPtr args, const DtFilename& searchPath, 00317 const DtVariableBindingsList& variableBindings); 00318 00321 virtual void addStatementChangedCallback( 00322 DtCurrentStatementChangedCallbackFcn fcn, void* usrData); 00323 00325 virtual void removeStatementChangedCallback( 00326 DtCurrentStatementChangedCallbackFcn fcn, void* usrData); 00327 00328 protected: 00329 00331 virtual void processAwaitingTask(); 00332 00335 virtual void createMainBlock(); 00336 00340 virtual void copyMainBlock(const DtPlan& otherPlan); 00341 00345 virtual void copyAndTranslateExecutionStack(const DtPlan& otherPlan); 00346 00350 virtual void copyAndTranslateTriggers(const DtPlan& otherPlan); 00351 00354 virtual void curStmtChanged(); 00355 00358 virtual void continuePlan(); 00359 00363 virtual void stepStatement(); 00364 00368 virtual void executeStatement(); 00369 00372 virtual void clearTriggerList(); 00373 00377 virtual void clearExecutionStack(); 00378 00380 virtual void emtpyExecutionStack(); 00381 00383 00384 00385 virtual void mapExecutionStackToRwExecutionStack(DtRwPlanExecutionStack& rwExecutionStack); 00386 virtual void mapPendingTriggersToPendingTriggerDataList(); 00388 00390 00391 00392 virtual void mapOldExecutionCursorStackToExecutionStack(const DtRwIntegerList& executionCursorStack); 00394 virtual void mapRwExecutionStackToExecutionStack(const DtRwPlanExecutionStack& rwExecutionStack); 00395 virtual void mapPendingTriggerDataToPendingTriggers(); 00397 00400 virtual int statementIdToCursor(DtStmtIdType statementId); 00401 virtual DtStmtIdType cursorToStatementId(int cursor); 00402 00405 virtual DtSimStatement* lookupStatementByCursor(int cursor); 00406 00407 protected: 00408 00414 DtRwBoolean myTaskRequestPending; 00415 00418 DtPlanBlock* myMainBlock; 00419 00424 DtList myExecutionStack; 00425 00428 DtRwBoolean myIsComplete; 00429 00432 DtRwBoolean myAbandoned; 00433 00435 DtList myPendingTriggers; 00436 00438 DtCallbackList<const DtPlan&> myStatementChangedCbs; 00439 //DtList myStatementChangedCbs; 00440 00444 00446 DtRwTriggerDataList myPendingTriggerDataList; 00447 00450 bool myExecutionIsEnabled; 00451 00453 bool myAwaitingTaskFlag; 00454 00455 DtRwString myPlanName; 00456 00457 bool myContinuePlan; 00458 00459 DtPlanExecutor* myPlanExecutor; 00460 00462 DtPlanStatus myLastSentStatus; 00463 }; 00464 00465 namespace DtBufferSerialize 00466 { 00469 DT_DLL_vrfplan int getSize(const DtPlan& contentPtr); 00470 00474 DT_DLL_vrfplan char *encode(const DtPlan& adminContentPtr, char *buffer); 00475 00480 DT_DLL_vrfplan const char *decode(DtPlan& adminContentPtr, const char *buffer); 00481 } 00482 00483 00484 #endif 00485