#include <xbt/fifo.h>
#include <xbt/dynar.h>
#include <xbt/automaton.h>
+#include <xbt/memory.hpp>
#include "src/mc/mc_state.h"
SG_BEGIN_DECL()
extern XBT_PRIVATE xbt_automaton_t property_automaton;
struct XBT_PRIVATE Pair {
- int num;
- int search_cycle;
- mc_state_t graph_state; /* System state included */
- xbt_automaton_state_t automaton_state;
- xbt_dynar_t atomic_propositions;
- int requests;
- int depth;
- int exploration_started;
- int visited_pair_removed;
+ int num = 0;
+ int search_cycle = 0;
+ mc_state_t graph_state = nullptr; /* System state included */
+ xbt_automaton_state_t automaton_state = nullptr;
+ simgrid::xbt::unique_ptr<s_xbt_dynar_t> atomic_propositions;
+ int requests = 0;
+ int depth = 0;
+ int exploration_started = 0;
+ int visited_pair_removed = 0;
+
+ Pair();
+ ~Pair();
+
+ Pair(Pair const&) = delete;
+ Pair& operator=(Pair const&) = delete;
};
struct XBT_PRIVATE VisitedPair {
- int num;
- int other_num; /* Dot output for */
- int acceptance_pair;
- mc_state_t graph_state; /* System state included */
- xbt_automaton_state_t automaton_state;
- xbt_dynar_t atomic_propositions;
- size_t heap_bytes_used;
- int nb_processes;
- int acceptance_removed;
- int visited_removed;
-};
+ int num = 0;
+ int other_num = 0; /* Dot output for */
+ int acceptance_pair = 0;
+ mc_state_t graph_state = nullptr; /* System state included */
+ xbt_automaton_state_t automaton_state = nullptr;
+ simgrid::xbt::unique_ptr<s_xbt_dynar_t> atomic_propositions;
+ size_t heap_bytes_used = 0;
+ int nb_processes = 0;
+ int acceptance_removed = 0;
+ int visited_removed = 0;
-XBT_PRIVATE simgrid::mc::Pair* pair_new(void);
-XBT_PRIVATE void pair_delete(simgrid::mc::Pair*);
-XBT_PRIVATE simgrid::mc::VisitedPair* visited_pair_new(int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions, mc_state_t graph_state);
-XBT_PRIVATE void visited_pair_delete(simgrid::mc::VisitedPair* p);
+ VisitedPair(int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions, mc_state_t graph_state);
+ ~VisitedPair();
+};
int modelcheck_liveness(void);
XBT_PRIVATE void show_stack_liveness(xbt_fifo_t stack);
XBT_PRIVATE extern xbt_dynar_t visited_pairs;
XBT_PRIVATE int is_visited_pair(simgrid::mc::VisitedPair* visited_pair, simgrid::mc::Pair* pair);
+XBT_PRIVATE int snapshot_compare(simgrid::mc::VisitedPair* state1, simgrid::mc::VisitedPair* state2);
+
}
}