Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 #ifndef _RegressionSM_h
00025 #define _RegressionSM_h
00026 
00027 #include "I_EventSystem.h"
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 struct RegressionSM :  public Continuation {
00036 
00037   RegressionTest *t; 
00038 
00039   
00040   virtual void run(); 
00041   virtual RegressionSM *clone() { return new RegressionSM(*this); } 
00042 
00043   
00044   void done(int status = REGRESSION_TEST_NOT_RUN);
00045   void run(int *pstatus);
00046   void run_in(int *pstatus, ink_hrtime t);
00047 
00048   
00049   int status;
00050   int *pstatus;
00051   RegressionSM *parent;
00052   int nwaiting;
00053   int nchildren;
00054   DynArray<RegressionSM*> children;
00055   intptr_t n, ichild;
00056   bool par, rep;
00057   Action *pending_action;
00058 
00059   int regression_sm_start(int event, void *data);
00060   int regression_sm_waiting(int event, void *data);
00061   void set_status(int status);
00062   void child_done(int status);
00063   void xrun(RegressionSM *parent);
00064 
00065   RegressionSM(RegressionTest *at = NULL) :
00066     t(at), status(REGRESSION_TEST_INPROGRESS),
00067     pstatus(0), parent(0), nwaiting(0), nchildren(0), children(0), ichild(0), par(false), rep(false),
00068     pending_action(0)
00069   {
00070     mutex = new_ProxyMutex();
00071   }
00072 
00073   RegressionSM(const RegressionSM &);
00074 };
00075 
00076 RegressionSM *r_sequential(RegressionTest *t, int n, RegressionSM *sm);
00077 RegressionSM *r_sequential(RegressionTest *t, RegressionSM *sm, ...); 
00078 RegressionSM *r_parallel(RegressionTest *t, int n, RegressionSM *sm);
00079 RegressionSM *r_parallel(RegressionTest *t, RegressionSM *sm, ...); 
00080 
00081 #endif