X-Git-Url: http://plrg.eecs.uci.edu/git/?p=model-checker.git;a=blobdiff_plain;f=scanalysis.h;h=23d127bf686748d8b36589149e44384045e4ea1e;hp=0ef12ba407ffa4a80e8b0d82723a2ab872094d05;hb=e79a7cd8e9c85d37a5d5c2a81ca14b1017b1b305;hpb=4541dc5155c69e168beedf3bd2a8f5ece0e0e65b diff --git a/scanalysis.h b/scanalysis.h index 0ef12ba..23d127b 100644 --- a/scanalysis.h +++ b/scanalysis.h @@ -1,11 +1,52 @@ #ifndef SCANALYSIS_H #define SCANALYSIS_H #include "traceanalysis.h" +#include "hashtable.h" -class SCAnalysis : public Trace_Analysis { +struct sc_statistics { + unsigned long long elapsedtime; + unsigned int sccount; + unsigned int nonsccount; + unsigned long long actions; +}; + +class SCAnalysis : public TraceAnalysis { public: SCAnalysis(); + ~SCAnalysis(); + virtual void setExecution(ModelExecution * execution); virtual void analyze(action_list_t *); + virtual const char * name(); + virtual bool option(char *); + virtual void finish(); + + + SNAPSHOTALLOC + private: + void update_stats(); + void print_list(action_list_t *list); + int buildVectors(action_list_t *); + bool updateConstraints(ModelAction *act); + void computeCV(action_list_t *); + action_list_t * generateSC(action_list_t *); + bool processRead(ModelAction *read, ClockVector *cv); + int getNextActions(ModelAction **array); + bool merge(ClockVector *cv, const ModelAction *act, const ModelAction *act2); + void check_rf(action_list_t *list); + void reset(action_list_t *list); + ModelAction* pruneArray(ModelAction**, int); + int maxthreads; + HashTable cvmap; + bool cyclic; + HashTable badrfset; + HashTable lastwrmap; + SnapVector threadlists; + ModelExecution *execution; + bool print_always; + bool print_buggy; + bool print_nonsc; + bool time; + struct sc_statistics *stats; }; #endif