6 #include "clockvector.h"
9 ClockVector::ClockVector(ClockVector *parent, ModelAction *act)
11 num_threads = parent ? parent->num_threads : 1;
12 if (act && act->get_type() == THREAD_CREATE)
14 clock = (int *)MYMALLOC(num_threads * sizeof(int));
16 std::memcpy(clock, parent->clock, parent->num_threads * sizeof(int));
21 clock[id_to_int(act->get_tid())] = act->get_seq_number();
24 ClockVector::~ClockVector()
29 void ClockVector::merge(ClockVector *cv)
36 if (cv->num_threads > num_threads) {
38 clk = (int *)MYMALLOC(cv->num_threads * sizeof(int));
41 /* Element-wise maximum */
42 for (int i = 0; i < num_threads; i++)
43 clk[i] = std::max(clock[i], cv->clock[i]);
46 for (int i = num_threads; i < cv->num_threads; i++)
47 clk[i] = cv->clock[i];
48 num_threads = cv->num_threads;
54 bool ClockVector::happens_before(ModelAction *act, thread_id_t id)
56 int i = id_to_int(id);
59 return act->get_seq_number() < clock[i];