projects
/
model-checker.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nodestack: style
[model-checker.git]
/
cyclegraph.h
diff --git
a/cyclegraph.h
b/cyclegraph.h
index 42866a3b370ceb52ab85967c1cfe0c80f4aedf6f..0a6f7382a69cf78dae9b4d2bf995864b599b3912 100644
(file)
--- a/
cyclegraph.h
+++ b/
cyclegraph.h
@@
-11,6
+11,7
@@
#include "config.h"
#include "mymemory.h"
#include "config.h"
#include "mymemory.h"
+class Promise;
class CycleNode;
class ModelAction;
class CycleNode;
class ModelAction;
@@
-23,19
+24,20
@@
class CycleGraph {
bool checkForCycles();
bool checkForRMWViolation();
void addRMWEdge(const ModelAction *from, const ModelAction *rmw);
bool checkForCycles();
bool checkForRMWViolation();
void addRMWEdge(const ModelAction *from, const ModelAction *rmw);
-
+ bool checkPromise(const ModelAction *from, Promise *p);
bool checkReachable(const ModelAction *from, const ModelAction *to);
void startChanges();
void commitChanges();
void rollbackChanges();
#if SUPPORT_MOD_ORDER_DUMP
void dumpNodes(FILE *file);
bool checkReachable(const ModelAction *from, const ModelAction *to);
void startChanges();
void commitChanges();
void rollbackChanges();
#if SUPPORT_MOD_ORDER_DUMP
void dumpNodes(FILE *file);
- void dumpGraphToFile(const char *
filename);
+ void dumpGraphToFile(const char *filename);
#endif
SNAPSHOTALLOC
private:
CycleNode * getNode(const ModelAction *);
#endif
SNAPSHOTALLOC
private:
CycleNode * getNode(const ModelAction *);
+ HashTable<CycleNode *, CycleNode *, uintptr_t, 4, model_malloc, model_calloc, model_free> *discovered;
/** @brief A table for mapping ModelActions to CycleNodes */
HashTable<const ModelAction *, CycleNode *, uintptr_t, 4> actionToNode;
/** @brief A table for mapping ModelActions to CycleNodes */
HashTable<const ModelAction *, CycleNode *, uintptr_t, 4> actionToNode;
@@
-52,25
+54,26
@@
class CycleGraph {
bool hasRMWViolation;
bool oldRMWViolation;
bool hasRMWViolation;
bool oldRMWViolation;
- std::vector<
CycleNode *
> rollbackvector;
- std::vector<
CycleNode *
> rmwrollbackvector;
+ std::vector<
CycleNode *, SnapshotAlloc<CycleNode *>
> rollbackvector;
+ std::vector<
CycleNode *, SnapshotAlloc<CycleNode *>
> rmwrollbackvector;
};
/** @brief A node within a CycleGraph; corresponds to one ModelAction */
class CycleNode {
public:
CycleNode(const ModelAction *action);
};
/** @brief A node within a CycleGraph; corresponds to one ModelAction */
class CycleNode {
public:
CycleNode(const ModelAction *action);
- bool addEdge(CycleNode * node);
- std::vector<CycleNode *> * getEdges();
+ bool addEdge(CycleNode *node);
+ CycleNode * getEdge(unsigned int i) const;
+ unsigned int getNumEdges() const;
bool setRMW(CycleNode *);
bool setRMW(CycleNode *);
- CycleNode
* getRMW()
;
- const ModelAction * getAction()
{return action;};
+ CycleNode
* getRMW() const
;
+ const ModelAction * getAction()
const { return action; }
void popEdge() {
edges.pop_back();
void popEdge() {
edges.pop_back();
- }
;
+ }
void clearRMW() {
void clearRMW() {
- hasRMW
=
NULL;
+ hasRMW
=
NULL;
}
SNAPSHOTALLOC
}
SNAPSHOTALLOC
@@
-79,11
+82,11
@@
class CycleNode {
const ModelAction *action;
/** @brief The edges leading out from this node */
const ModelAction *action;
/** @brief The edges leading out from this node */
- std::vector<
CycleNode *
> edges;
+ std::vector<
CycleNode *, SnapshotAlloc<CycleNode *>
> edges;
/** Pointer to a RMW node that reads from this node, or NULL, if none
* exists */
/** Pointer to a RMW node that reads from this node, or NULL, if none
* exists */
- CycleNode *
hasRMW;
+ CycleNode *hasRMW;
};
#endif
};
#endif