1 /* Copyright (c) 2004-2007, 2009-2014. The SimGrid Team.
2 * All rights reserved. */
4 /* This program is free software; you can redistribute it and/or modify it
5 * under the terms of the license (GNU LGPL) which comes with this package. */
11 #include "xbt/dynar.h"
12 #include "surf/maxmin.h"
13 #include "surf/datatypes.h"
14 #include "simgrid/platf_interface.h"
15 #include "simgrid/forward.h"
21 #include "trace_mgr.hpp"
22 #include "xbt/RngStream.h"
24 typedef struct tmgr_event {
27 } s_tmgr_event_t, *tmgr_event_t;
30 e_trace_list, e_trace_probabilist
33 enum e_event_generator_type {
34 e_generator_uniform, e_generator_exponential, e_generator_weibull
37 typedef struct probabilist_event_generator {
38 enum e_event_generator_type type;
45 } s_uniform_parameters;
48 } s_exponential_parameters;
52 } s_weibull_parameters;
54 } s_probabilist_event_generator_t;
56 typedef struct tmgr_trace {
57 enum e_trace_type type;
60 xbt_dynar_t event_list;
63 probabilist_event_generator_t event_generator[2];
70 /* Iterator within a trace */
71 typedef struct tmgr_trace_iterator {
76 } s_tmgr_trace_event_t;
78 XBT_PRIVATE double tmgr_event_generator_next_value(probabilist_event_generator_t generator);
80 /* Creation functions */
81 XBT_PUBLIC(tmgr_trace_t) tmgr_empty_trace_new(void);
82 XBT_PUBLIC(void) tmgr_trace_free(tmgr_trace_t trace);
84 * \brief Free a trace event structure
86 * This function frees a trace_event if it can be freed, ie, if it has the free_me flag set to 1. This flag indicates whether the structure is still used somewhere or not.
87 * \param trace_event Trace event structure
88 * \return 1 if the structure was freed, 0 otherwise
90 XBT_PUBLIC(int) tmgr_trace_event_free(tmgr_trace_iterator_t trace_event);
92 XBT_PUBLIC(void) tmgr_finalize(void);
100 /* Future Event Set (collection of iterators over the traces)
101 * That's useful to quickly know which is the next occurring event in a set of traces. */
102 XBT_PUBLIC_CLASS future_evt_set {
105 virtual ~future_evt_set();
107 tmgr_trace_iterator_t pop_leq(double date, double *value, void** resource);
108 tmgr_trace_iterator_t add_trace(
114 // TODO: use a boost type for the heap (or a ladder queue)
115 xbt_heap_t p_heap = xbt_heap_new(8, xbt_free_f); /* Content: only trace_events (yep, 8 is an arbitrary value) */
118 }} // namespace simgrid::trace_mgr
119 #endif /* C++ only */
121 #endif /* _SURF_TMGR_H */