7 #include "clockvector.h"
10 ClockVector::ClockVector(ClockVector *parent, ModelAction *act)
12 num_threads = model->get_num_threads();
13 clock = (int *)MYMALLOC(num_threads * sizeof(int));
14 memset(clock, 0, num_threads * sizeof(int));
16 std::memcpy(clock, parent->clock, parent->num_threads * sizeof(int));
19 clock[id_to_int(act->get_tid())] = act->get_seq_number();
22 ClockVector::~ClockVector()
27 void ClockVector::merge(ClockVector *cv)
34 if (cv->num_threads > num_threads) {
36 clk = (int *)MYMALLOC(cv->num_threads * sizeof(int));
39 /* Element-wise maximum */
40 for (int i = 0; i < num_threads; i++)
41 clk[i] = std::max(clock[i], cv->clock[i]);
44 for (int i = num_threads; i < cv->num_threads; i++)
45 clk[i] = cv->clock[i];
46 num_threads = cv->num_threads;
54 * @return true if this ClockVector's thread has synchronized with act's
55 * thread, false otherwise. That is, this function returns:
56 * <BR><CODE>act <= cv[act->tid]</CODE>
58 bool ClockVector::synchronized_since(ModelAction *act)
60 int i = id_to_int(act->get_tid());
63 return act->get_seq_number() <= clock[i];
67 void ClockVector::print()
71 for (i = 0; i < num_threads; i++)
72 printf("%2d%s", clock[i], (i == num_threads - 1) ? ")\n" : ", ");