- switch(trace->type) {
- case e_trace_list:
-
- event = (tmgr_event_t)xbt_dynar_get_ptr(trace->s_list.event_list, trace_iterator->idx);
-
- *value = event->value;
-
- if (trace_iterator->idx < xbt_dynar_length(trace->s_list.event_list) - 1) {
- xbt_heap_push(p_heap, trace_iterator, event_date + event->delta);
- trace_iterator->idx++;
- } else if (event->delta > 0) { /* Last element, checking for periodicity */
- xbt_heap_push(p_heap, trace_iterator, event_date + event->delta);
- trace_iterator->idx = 1; /* not 0 as the first event is a placeholder to handle when events really start */
- } else { /* We don't need this trace_event anymore */
- trace_iterator->free_me = 1;
- }
- break;
-
- case e_trace_probabilist:
-
- //FIXME : not tested yet
- if(trace->s_probabilist.is_state_trace) {
- *value = (double) trace->s_probabilist.next_event;
- if(trace->s_probabilist.next_event == 0) {
- event_delta = tmgr_event_generator_next_value(trace->s_probabilist.event_generator[0]);
- trace->s_probabilist.next_event = 1;
- } else {
- event_delta = tmgr_event_generator_next_value(trace->s_probabilist.event_generator[1]);
- trace->s_probabilist.next_event = 0;
- }
- } else {
- event_delta = tmgr_event_generator_next_value(trace->s_probabilist.event_generator[0]);
- *value = tmgr_event_generator_next_value(trace->s_probabilist.event_generator[1]);
- }
- xbt_heap_push(p_heap, trace_iterator, event_date + event_delta);
- XBT_DEBUG("Generating a new event at date %f, with value %f", event_date + event_delta, *value);
-
- break;
+ tmgr::DatedValue dateVal = trace->event_list.at(trace_iterator->idx);
+
+ *value = dateVal.value_;
+
+ if (trace_iterator->idx < trace->event_list.size() - 1) {
+ heap_.emplace(event_date + dateVal.date_, trace_iterator);
+ trace_iterator->idx++;
+ } else if (dateVal.date_ > 0) { /* Last element. Shall we loop? */
+ heap_.emplace(event_date + dateVal.date_, trace_iterator);
+ trace_iterator->idx = 1; /* idx=0 is a placeholder to store when events really start */
+ } else { /* If we don't loop, we don't need this trace_event anymore */
+ trace_iterator->free_me = true;