VR-Forces 4.0.4 Class Documentation
include/vrfplan/plan.h
Go to the documentation of this file.
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 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)