Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[trace] re-organizing structures for tracing events
[simgrid.git] / src / instr / instr_paje_trace.c
1 /* Copyright (c) 2010. The SimGrid Team.
2  * All rights reserved.                                                     */
3
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. */
6
7 #include "instr/instr_private.h"
8
9 #ifdef HAVE_TRACING
10
11 #define INSTR_PAJE_ASSERT(str) {xbt_assert1(str!=NULL&&strlen(str)>0, "'%s' is NULL or length is zero", #str);}
12
13 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr, "Paje tracing event system");
14
15 typedef enum {
16   PAJE_DefineContainerType,
17   PAJE_DefineVariableType,
18   PAJE_DefineStateType,
19   PAJE_DefineEventType,
20   PAJE_DefineLinkType,
21   PAJE_CreateContainer,
22   PAJE_DestroyContainer,
23   PAJE_SetVariable,
24   PAJE_AddVariable,
25   PAJE_SubVariable,
26   PAJE_SetState,
27   PAJE_PushState,
28   PAJE_PopState,
29   PAJE_StartLink,
30   PAJE_EndLink,
31   PAJE_NewEvent,
32 } e_event_type;
33
34 typedef struct paje_event *paje_event_t;
35 typedef struct paje_event {
36   unsigned int id;
37   double timestamp;
38   e_event_type event_type;
39   void (*print) (paje_event_t event);
40   void *data;
41 } s_paje_event_t;
42
43 typedef struct s_defineContainerType *defineContainerType_t;
44 typedef struct s_defineContainerType {
45   type_t type;
46 }s_defineContainerType_t;
47
48 typedef struct s_defineVariableType *defineVariableType_t;
49 typedef struct s_defineVariableType {
50   type_t type;
51 }s_defineVariableType_t;
52
53 typedef struct s_defineStateType *defineStateType_t;
54 typedef struct s_defineStateType {
55   type_t type;
56 }s_defineStateType_t;
57
58 typedef struct s_defineEventType *defineEventType_t;
59 typedef struct s_defineEventType {
60   type_t type;
61 }s_defineEventType_t;
62
63 typedef struct s_defineLinkType *defineLinkType_t;
64 typedef struct s_defineLinkType {
65   type_t type;
66   type_t source;
67   type_t dest;
68 }s_defineLinkType_t;
69
70 typedef struct s_createContainer *createContainer_t;
71 typedef struct s_createContainer {
72   container_t container;
73 }s_createContainer_t;
74
75 typedef struct s_destroyContainer *destroyContainer_t;
76 typedef struct s_destroyContainer {
77   container_t container;
78 }s_destroyContainer_t;
79
80 typedef struct s_setVariable *setVariable_t;
81 typedef struct s_setVariable {
82   container_t container;
83   type_t type;
84   double value;
85 }s_setVariable_t;
86
87 typedef struct s_addVariable *addVariable_t;
88 typedef struct s_addVariable {
89   container_t container;
90   type_t type;
91   double value;
92 }s_addVariable_t;
93
94 typedef struct s_subVariable *subVariable_t;
95 typedef struct s_subVariable {
96   container_t container;
97   type_t type;
98   double value;
99 }s_subVariable_t;
100
101 typedef struct s_setState *setState_t;
102 typedef struct s_setState {
103   container_t container;
104   type_t type;
105   char *value;
106 }s_setState_t;
107
108 typedef struct s_pushState *pushState_t;
109 typedef struct s_pushState {
110   container_t container;
111   type_t type;
112   char *value;
113 }s_pushState_t;
114
115 typedef struct s_popState *popState_t;
116 typedef struct s_popState {
117   container_t container;
118   type_t type;
119   char *value;
120 }s_popState_t;
121
122 typedef struct s_startLink *startLink_t;
123 typedef struct s_startLink {
124   type_t type;
125   container_t container;
126   container_t sourceContainer;
127   char *value;
128   char *key;
129 }s_startLink_t;
130
131 typedef struct s_endLink *endLink_t;
132 typedef struct s_endLink {
133   type_t type;
134   container_t container;
135   container_t destContainer;
136   char *value;
137   char *key;
138 }s_endLink_t;
139
140 typedef struct s_newEvent *newEvent_t;
141 typedef struct s_newEvent {
142   type_t type;
143   container_t container;
144   char *value;
145 }s_newEvent_t;
146
147 static FILE *tracing_file = NULL;
148
149 static int pajeDefineContainerTypeId = 0;
150 static int pajeDefineStateTypeId = 1;
151 static int pajeDefineEntityValueId = 2;
152 static int pajeDefineEventTypeId = 3;
153 static int pajeDefineLinkTypeId = 4;
154 static int pajeCreateContainerId = 5;
155 static int pajeSetStateId = 6;
156 #define UNUSED007 7
157 static int pajePopStateId = 8;
158 static int pajeDestroyContainerId = 9;
159 #define UNUSED006 10
160 #define UNUSED003 11
161 static int pajeStartLinkId = 12;
162 static int pajeEndLinkId = 13;
163 #define UNUSED000 14
164 #define UNUSED004 15
165 #define UNUSED008 16
166 #define UNUSED009 17
167 #define UNUSED005 18
168 static int pajePushStateId = 19;
169 static int pajeDefineEventTypeWithColorId = 20;
170 static int pajeDefineVariableTypeWithColorId = 21;
171 static int pajeSetVariableId = 22;
172 static int pajeAddVariableId = 23;
173 static int pajeSubVariableId = 24;
174 static int pajeDefineVariableTypeId = 25;
175 #define UNUSED001 26
176 static int pajeNewEventId = 27;
177
178 #define TRACE_LINE_SIZE 1000
179
180 void TRACE_paje_start(void)
181 {
182   char *filename = TRACE_get_filename();
183   tracing_file = fopen(filename, "w");
184   xbt_assert1 (tracing_file != NULL, "Tracefile %s could not be opened for writing.", filename);
185
186   DEBUG1("Filename %s is open for writing", filename);
187
188   /* output header */
189   TRACE_paje_create_header();
190 }
191
192 void TRACE_paje_end(void)
193 {
194   fclose(tracing_file);
195   char *filename = TRACE_get_filename();
196   DEBUG1("Filename %s is closed", filename);
197 }
198
199 void TRACE_paje_create_header(void)
200 {
201   DEBUG0 ("Define paje header");
202   fprintf(tracing_file, "\
203 %%EventDef PajeDefineContainerType %d \n\
204 %%       Alias string \n\
205 %%       ContainerType string \n\
206 %%       Name string \n\
207 %%EndEventDef \n\
208 %%EventDef PajeDefineStateType %d \n\
209 %%       Alias string \n\
210 %%       ContainerType string \n\
211 %%       Name string \n\
212 %%EndEventDef \n\
213 %%EventDef PajeDefineEntityValue %d \n\
214 %%       Alias string \n\
215 %%       EntityType string \n\
216 %%       Name string \n\
217 %%EndEventDef \n\
218 %%EventDef PajeDefineEventType %d \n\
219 %%       Alias string \n\
220 %%       EntityType string \n\
221 %%       Name string \n\
222 %%       Color color \n\
223 %%EndEventDef \n\
224 %%EventDef PajeDefineEventType %d \n\
225 %%       Alias string \n\
226 %%       EntityType string \n\
227 %%       Name string \n\
228 %%EndEventDef \n\
229 %%EventDef PajeDefineLinkType %d \n\
230 %%       Alias string \n\
231 %%       ContainerType string \n\
232 %%       SourceContainerType string \n\
233 %%       DestContainerType string \n\
234 %%       Name string \n\
235 %%EndEventDef \n\
236 %%EventDef PajeCreateContainer %d \n\
237 %%       Time date \n\
238 %%       Alias string \n\
239 %%       Type string \n\
240 %%       Container string \n\
241 %%       Name string \n\
242 %%EndEventDef \n\
243 %%EventDef PajeDestroyContainer %d \n\
244 %%       Time date \n\
245 %%       Type string \n\
246 %%       Container string \n\
247 %%EndEventDef \n\
248 %%EventDef PajeSetState %d \n\
249 %%       Time date \n\
250 %%       EntityType string \n\
251 %%       Container string \n\
252 %%       Value string \n\
253 %%EndEventDef\n\
254 %%EventDef PajePopState %d \n\
255 %%       Time date \n\
256 %%       EntityType string \n\
257 %%       Container string \n\
258 %%EndEventDef\n\
259 %%EventDef PajeStartLink %d \n\
260 %%       Time date \n\
261 %%       EntityType string \n\
262 %%       Container string \n\
263 %%       Value string \n\
264 %%       SourceContainer string \n\
265 %%       Key string \n\
266 %%EndEventDef\n\
267 %%EventDef PajeEndLink %d \n\
268 %%       Time date \n\
269 %%       EntityType string \n\
270 %%       Container string \n\
271 %%       Value string \n\
272 %%       DestContainer string \n\
273 %%       Key string \n\
274 %%EndEventDef\n\
275 %%EventDef PajePushState %d \n\
276 %%       Time date \n\
277 %%       EntityType string \n\
278 %%       Container string \n\
279 %%       Value string \n\
280 %%EndEventDef\n\
281 %%EventDef PajeSetVariable %d \n\
282 %%       Time date \n\
283 %%       EntityType string \n\
284 %%       Container string \n\
285 %%       Value string \n\
286 %%EndEventDef\n\
287 %%EventDef PajeAddVariable %d \n\
288 %%       Time date \n\
289 %%       EntityType string \n\
290 %%       Container string \n\
291 %%       Value string \n\
292 %%EndEventDef\n\
293 %%EventDef PajeSubVariable %d \n\
294 %%       Time date \n\
295 %%       EntityType string \n\
296 %%       Container string \n\
297 %%       Value string \n\
298 %%EndEventDef\n\
299 %%EventDef PajeDefineVariableType %d \n\
300 %%       Alias string \n\
301 %%       ContainerType string \n\
302 %%       Name string \n\
303 %%EndEventDef \n\
304 %%EventDef PajeDefineVariableType %d \n\
305 %%       Alias string \n\
306 %%       ContainerType string \n\
307 %%       Name string \n\
308 %%       Color color \n\
309 %%EndEventDef \n\
310 %%EventDef PajeNewEvent %d \n\
311 %%       Time date \n\
312 %%       EntityType string \n\
313 %%       Container string \n\
314 %%       Value string \n\
315 %%EndEventDef\n", pajeDefineContainerTypeId, pajeDefineStateTypeId, pajeDefineEntityValueId, pajeDefineEventTypeWithColorId, pajeDefineEventTypeId, pajeDefineLinkTypeId, pajeCreateContainerId, pajeDestroyContainerId, pajeSetStateId, pajePopStateId, pajeStartLinkId, pajeEndLinkId, pajePushStateId, pajeSetVariableId, pajeAddVariableId, pajeSubVariableId, pajeDefineVariableTypeId, pajeDefineVariableTypeWithColorId, pajeNewEventId);
316 }
317
318 /* internal do the instrumentation module */
319 static void print_pajeDefineContainerType(paje_event_t event)
320 {
321   fprintf(tracing_file, "%d %s %s %s\n",
322       event->id,
323       ((defineContainerType_t)event->data)->type->id,
324       ((defineContainerType_t)event->data)->type->father->id,
325       ((defineContainerType_t)event->data)->type->name);
326 }
327
328 static void print_pajeDefineVariableType(paje_event_t event)
329 {
330   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
331       event->id,
332       ((defineVariableType_t)event->data)->type->id,
333       ((defineVariableType_t)event->data)->type->father->id,
334       ((defineVariableType_t)event->data)->type->name,
335       ((defineVariableType_t)event->data)->type->color);
336 }
337
338 static void print_pajeDefineStateType(paje_event_t event)
339 {
340   fprintf(tracing_file, "%d %s %s %s\n",
341       event->id,
342       ((defineStateType_t)event->data)->type->id,
343       ((defineStateType_t)event->data)->type->father->id,
344       ((defineStateType_t)event->data)->type->name);
345 }
346
347 static void print_pajeDefineEventType(paje_event_t event)
348 {
349   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
350       event->id,
351       ((defineEventType_t)event->data)->type->id,
352       ((defineEventType_t)event->data)->type->father->id,
353       ((defineEventType_t)event->data)->type->name,
354       ((defineEventType_t)event->data)->type->color);
355 }
356
357 static void print_pajeDefineLinkType(paje_event_t event)
358 {
359   fprintf(tracing_file, "%d %s %s %s %s %s\n",
360       event->id,
361       ((defineLinkType_t)event->data)->type->id,
362       ((defineLinkType_t)event->data)->type->father->id,
363       ((defineLinkType_t)event->data)->source->id,
364       ((defineLinkType_t)event->data)->dest->id,
365       ((defineLinkType_t)event->data)->type->name);
366 }
367
368 static void print_pajeCreateContainer(paje_event_t event)
369 {
370   if (event->timestamp == 0){
371     fprintf(tracing_file, "%d 0 %s %s %s %s\n",
372         event->id,
373         ((createContainer_t)event->data)->container->id,
374         ((createContainer_t)event->data)->container->type->id,
375         ((createContainer_t)event->data)->container->father->id,
376         ((createContainer_t)event->data)->container->name);
377   }else{
378     fprintf(tracing_file, "%d %lf %s %s %s %s\n",
379         event->id,
380         event->timestamp,
381         ((createContainer_t)event->data)->container->id,
382         ((createContainer_t)event->data)->container->type->id,
383         ((createContainer_t)event->data)->container->father->id,
384         ((createContainer_t)event->data)->container->name);
385   }
386 }
387
388 static void print_pajeDestroyContainer(paje_event_t event)
389 {
390   if (event->timestamp == 0){
391     fprintf(tracing_file, "%d 0 %s %s\n",
392         event->id,
393         ((destroyContainer_t)event->data)->container->type->id,
394         ((destroyContainer_t)event->data)->container->id);
395   }else{
396     fprintf(tracing_file, "%d %lf %s %s\n",
397         event->id,
398         event->timestamp,
399         ((destroyContainer_t)event->data)->container->type->id,
400         ((destroyContainer_t)event->data)->container->id);
401   }
402 }
403
404 static void print_pajeSetVariable(paje_event_t event)
405 {
406   if (event->timestamp == 0){
407     fprintf(tracing_file, "%d 0 %s %s %f\n",
408         event->id,
409         ((setVariable_t)event->data)->type->id,
410         ((setVariable_t)event->data)->container->id,
411         ((setVariable_t)event->data)->value);
412   }else{
413     fprintf(tracing_file, "%d %lf %s %s %f\n",
414         event->id,
415         event->timestamp,
416         ((setVariable_t)event->data)->type->id,
417         ((setVariable_t)event->data)->container->id,
418         ((setVariable_t)event->data)->value);
419   }
420 }
421
422 static void print_pajeAddVariable(paje_event_t event)
423 {
424   if (event->timestamp == 0){
425     fprintf(tracing_file, "%d 0 %s %s %f\n",
426         event->id,
427         ((addVariable_t)event->data)->type->id,
428         ((addVariable_t)event->data)->container->id,
429         ((addVariable_t)event->data)->value);
430   }else{
431     fprintf(tracing_file, "%d %lf %s %s %f\n",
432         event->id,
433         event->timestamp,
434         ((addVariable_t)event->data)->type->id,
435         ((addVariable_t)event->data)->container->id,
436         ((addVariable_t)event->data)->value);
437   }
438 }
439
440 static void print_pajeSubVariable(paje_event_t event)
441 {
442   if (event->timestamp == 0){
443     fprintf(tracing_file, "%d 0 %s %s %f\n",
444         event->id,
445         ((subVariable_t)event->data)->type->id,
446         ((subVariable_t)event->data)->container->id,
447         ((subVariable_t)event->data)->value);
448   }else{
449     fprintf(tracing_file, "%d %lf %s %s %f\n",
450         event->id,
451         event->timestamp,
452         ((subVariable_t)event->data)->type->id,
453         ((subVariable_t)event->data)->container->id,
454         ((subVariable_t)event->data)->value);
455   }
456 }
457
458 static void print_pajeSetState(paje_event_t event)
459 {
460   if (event->timestamp == 0){
461     fprintf(tracing_file, "%d 0 %s %s %s\n",
462         event->id,
463         ((setState_t)event->data)->type->id,
464         ((setState_t)event->data)->container->id,
465         ((setState_t)event->data)->value);
466   }else{
467     fprintf(tracing_file, "%d %lf %s %s %s\n",
468         event->id,
469         event->timestamp,
470         ((setState_t)event->data)->type->id,
471         ((setState_t)event->data)->container->id,
472         ((setState_t)event->data)->value);
473   }
474 }
475
476 static void print_pajePushState(paje_event_t event)
477 {
478   if (event->timestamp == 0){
479     fprintf(tracing_file, "%d 0 %s %s %s\n",
480         event->id,
481         ((pushState_t)event->data)->type->id,
482         ((pushState_t)event->data)->container->id,
483         ((pushState_t)event->data)->value);
484   }else{
485     fprintf(tracing_file, "%d %lf %s %s %s\n",
486         event->id,
487         event->timestamp,
488         ((pushState_t)event->data)->type->id,
489         ((pushState_t)event->data)->container->id,
490         ((pushState_t)event->data)->value);
491   }
492 }
493
494 static void print_pajePopState(paje_event_t event)
495 {
496   if (event->timestamp == 0){
497     fprintf(tracing_file, "%d 0 %s %s\n",
498         event->id,
499         ((popState_t)event->data)->type->id,
500         ((popState_t)event->data)->container->id);
501   }else{
502     fprintf(tracing_file, "%d %lf %s %s\n",
503         event->id,
504         event->timestamp,
505         ((popState_t)event->data)->type->id,
506         ((popState_t)event->data)->container->id);
507   }
508 }
509
510 static void print_pajeStartLink(paje_event_t event)
511 {
512   if (event->timestamp == 0){
513     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
514         event->id,
515         ((startLink_t)event->data)->type->id,
516         ((startLink_t)event->data)->container->id,
517         ((startLink_t)event->data)->value,
518         ((startLink_t)event->data)->sourceContainer->id,
519         ((startLink_t)event->data)->key);
520   }else {
521     fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
522         event->id,
523         event->timestamp,
524         ((startLink_t)event->data)->type->id,
525         ((startLink_t)event->data)->container->id,
526         ((startLink_t)event->data)->value,
527         ((startLink_t)event->data)->sourceContainer->id,
528         ((startLink_t)event->data)->key);
529   }
530 }
531
532 static void print_pajeEndLink(paje_event_t event)
533 {
534   if (event->timestamp == 0){
535     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
536         event->id,
537         ((endLink_t)event->data)->type->id,
538         ((endLink_t)event->data)->container->id,
539         ((endLink_t)event->data)->value,
540         ((endLink_t)event->data)->destContainer->id,
541         ((endLink_t)event->data)->key);
542   }else {
543     fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
544         event->id,
545         event->timestamp,
546         ((endLink_t)event->data)->type->id,
547         ((endLink_t)event->data)->container->id,
548         ((endLink_t)event->data)->value,
549         ((endLink_t)event->data)->destContainer->id,
550         ((endLink_t)event->data)->key);
551   }
552 }
553
554 static void print_pajeNewEvent (paje_event_t event)
555 {
556   if (event->timestamp == 0){
557     fprintf(tracing_file, "%d 0 %s %s %s\n",
558         event->id,
559         ((newEvent_t)event->data)->type->id,
560         ((newEvent_t)event->data)->container->id,
561         ((newEvent_t)event->data)->value);
562   }else{
563     fprintf(tracing_file, "%d %lf %s %s %s\n",
564         event->id,
565         event->timestamp,
566         ((newEvent_t)event->data)->type->id,
567         ((newEvent_t)event->data)->container->id,
568         ((newEvent_t)event->data)->value);
569   }
570 }
571
572 void new_pajeDefineContainerType(type_t type)
573 {
574   paje_event_t event = xbt_new0(s_paje_event_t, 1);
575   event->event_type = PAJE_DefineContainerType;
576   event->id = pajeDefineContainerTypeId;
577   event->timestamp = 0;
578   event->print = print_pajeDefineContainerType;
579   event->data = xbt_new0(s_defineContainerType_t, 1);
580   ((defineContainerType_t)(event->data))->type = type;
581
582   //print it
583   event->print (event);
584
585   //destroy it
586   xbt_free (event->data);
587   xbt_free (event);
588   event = NULL;
589 }
590
591 void new_pajeDefineVariableType(type_t type)
592 {
593   paje_event_t event = xbt_new0(s_paje_event_t, 1);
594   event->event_type = PAJE_DefineVariableType;
595   event->id = pajeDefineVariableTypeWithColorId;
596   event->timestamp = 0;
597   event->print = print_pajeDefineVariableType;
598   event->data = xbt_new0(s_defineVariableType_t, 1);
599   ((defineVariableType_t)(event->data))->type = type;
600
601   //print it
602   event->print (event);
603
604   //destroy it
605   xbt_free (event->data);
606   xbt_free (event);
607   event = NULL;
608 }
609
610 void new_pajeDefineStateType(type_t type)
611 {
612   paje_event_t event = xbt_new0(s_paje_event_t, 1);
613   event->event_type = PAJE_DefineStateType;
614   event->id = pajeDefineStateTypeId;
615   event->timestamp = 0;
616   event->print = print_pajeDefineStateType;
617   event->data = xbt_new0(s_defineStateType_t, 1);
618   ((defineStateType_t)(event->data))->type = type;
619
620   //print it
621   event->print (event);
622
623   //destroy it
624   xbt_free (event->data);
625   xbt_free (event);
626   event = NULL;
627 }
628
629 void new_pajeDefineEventType(type_t type)
630 {
631   paje_event_t event = xbt_new0(s_paje_event_t, 1);
632   event->event_type = PAJE_DefineEventType;
633   event->id = pajeDefineEventTypeWithColorId;
634   event->timestamp = 0;
635   event->print = print_pajeDefineEventType;
636   event->data = xbt_new0(s_defineEventType_t, 1);
637   ((defineEventType_t)(event->data))->type = type;
638
639   //print it
640   event->print (event);
641
642   //destroy it
643   xbt_free (event->data);
644   xbt_free (event);
645   event = NULL;
646 }
647
648 void new_pajeDefineLinkType(type_t type, type_t source, type_t dest)
649 {
650   paje_event_t event = xbt_new0(s_paje_event_t, 1);
651   event->event_type = PAJE_DefineLinkType;
652   event->id = pajeDefineLinkTypeId;
653   event->timestamp = 0;
654   event->print = print_pajeDefineLinkType;
655   event->data = xbt_new0(s_defineLinkType_t, 1);
656   ((defineLinkType_t)(event->data))->type = type;
657   ((defineLinkType_t)(event->data))->source = source;
658   ((defineLinkType_t)(event->data))->dest = dest;
659
660   //print it
661   event->print (event);
662
663   //destroy it
664   xbt_free (event->data);
665   xbt_free (event);
666   event = NULL;
667 }
668
669 void new_pajeCreateContainer (container_t container)
670 {
671   paje_event_t event = xbt_new0(s_paje_event_t, 1);
672   event->event_type = PAJE_CreateContainer;
673   event->id = pajeCreateContainerId;
674   event->timestamp = SIMIX_get_clock();
675   event->print = print_pajeCreateContainer;
676   event->data = xbt_new0(s_createContainer_t, 1);
677   ((createContainer_t)(event->data))->container = container;
678
679   //print it
680   event->print (event);
681
682   //destroy it
683   xbt_free (event->data);
684   xbt_free (event);
685   event = NULL;
686 }
687
688 void new_pajeDestroyContainer (container_t container)
689 {
690   paje_event_t event = xbt_new0(s_paje_event_t, 1);
691   event->event_type = PAJE_DestroyContainer;
692   event->id = pajeDestroyContainerId;
693   event->timestamp = SIMIX_get_clock();
694   event->print = print_pajeDestroyContainer;
695   event->data = xbt_new0(s_destroyContainer_t, 1);
696   ((destroyContainer_t)(event->data))->container = container;
697
698   //print it
699   event->print (event);
700
701   //destroy it
702   xbt_free (event->data);
703   xbt_free (event);
704   event = NULL;
705 }
706
707 void new_pajeSetVariable (double timestamp, container_t container, type_t type, double value)
708 {
709   paje_event_t event = xbt_new0(s_paje_event_t, 1);
710   event->event_type = PAJE_SetVariable;
711   event->id = pajeSetVariableId;
712   event->timestamp = timestamp;
713   event->print = print_pajeSetVariable;
714   event->data = xbt_new0(s_setVariable_t, 1);
715   ((setVariable_t)(event->data))->type = type;
716   ((setVariable_t)(event->data))->container = container;
717   ((setVariable_t)(event->data))->value = value;
718
719   //print it
720   event->print (event);
721
722   //destroy it
723   xbt_free (event->data);
724   xbt_free (event);
725   event = NULL;
726 }
727
728
729 void new_pajeAddVariable (double timestamp, container_t container, type_t type, double value)
730 {
731   paje_event_t event = xbt_new0(s_paje_event_t, 1);
732   event->event_type = PAJE_AddVariable;
733   event->id = pajeAddVariableId;
734   event->timestamp = timestamp;
735   event->print = print_pajeAddVariable;
736   event->data = xbt_new0(s_addVariable_t, 1);
737   ((addVariable_t)(event->data))->type = type;
738   ((addVariable_t)(event->data))->container = container;
739   ((addVariable_t)(event->data))->value = value;
740
741   //print it
742   event->print (event);
743
744   //destroy it
745   xbt_free (event->data);
746   xbt_free (event);
747   event = NULL;
748 }
749
750 void new_pajeSubVariable (double timestamp, container_t container, type_t type, double value)
751 {
752   paje_event_t event = xbt_new0(s_paje_event_t, 1);
753   event->event_type = PAJE_SubVariable;
754   event->id = pajeSubVariableId;
755   event->timestamp = timestamp;
756   event->print = print_pajeSubVariable;
757   event->data = xbt_new0(s_subVariable_t, 1);
758   ((subVariable_t)(event->data))->type = type;
759   ((subVariable_t)(event->data))->container = container;
760   ((subVariable_t)(event->data))->value = value;
761
762   //print it
763   event->print (event);
764
765   //destroy it
766   xbt_free (event->data);
767   xbt_free (event);
768   event = NULL;
769 }
770
771 void new_pajeSetState (double timestamp, container_t container, type_t type, const char *value)
772 {
773   paje_event_t event = xbt_new0(s_paje_event_t, 1);
774   event->event_type = PAJE_SetState;
775   event->id = pajeSetStateId;
776   event->timestamp = timestamp;
777   event->print = print_pajeSetState;
778   event->data = xbt_new0(s_setState_t, 1);
779   ((setState_t)(event->data))->type = type;
780   ((setState_t)(event->data))->container = container;
781   ((setState_t)(event->data))->value = xbt_strdup(value);
782
783   //print it
784   event->print (event);
785
786   //destroy it
787   xbt_free (((setState_t)(event->data))->value);
788   xbt_free (event->data);
789   xbt_free (event);
790   event = NULL;
791 }
792
793
794 void new_pajePushState (double timestamp, container_t container, type_t type, const char *value)
795 {
796   paje_event_t event = xbt_new0(s_paje_event_t, 1);
797   event->event_type = PAJE_PushState;
798   event->id = pajePushStateId;
799   event->timestamp = timestamp;
800   event->print = print_pajePushState;
801   event->data = xbt_new0(s_pushState_t, 1);
802   ((pushState_t)(event->data))->type = type;
803   ((pushState_t)(event->data))->container = container;
804   ((pushState_t)(event->data))->value = xbt_strdup(value);
805
806   //print it
807   event->print (event);
808
809   //destroy it
810   xbt_free (((pushState_t)(event->data))->value);
811   xbt_free (event->data);
812   xbt_free (event);
813   event = NULL;
814 }
815
816
817 void new_pajePopState (double timestamp, container_t container, type_t type)
818 {
819   paje_event_t event = xbt_new0(s_paje_event_t, 1);
820   event->event_type = PAJE_PopState;
821   event->id = pajePopStateId;
822   event->timestamp = timestamp;
823   event->print = print_pajePopState;
824   event->data = xbt_new0(s_popState_t, 1);
825   ((popState_t)(event->data))->type = type;
826   ((popState_t)(event->data))->container = container;
827
828   //print it
829   event->print (event);
830
831   //destroy it
832   xbt_free (event->data);
833   xbt_free (event);
834   event = NULL;
835 }
836
837 void new_pajeStartLink (double timestamp, container_t container, type_t type, container_t sourceContainer, const char *value, const char *key)
838 {
839   paje_event_t event = xbt_new0(s_paje_event_t, 1);
840   event->event_type = PAJE_StartLink;
841   event->id = pajeStartLinkId;
842   event->timestamp = timestamp;
843   event->print = print_pajeStartLink;
844   event->data = xbt_new0(s_startLink_t, 1);
845   ((startLink_t)(event->data))->type = type;
846   ((startLink_t)(event->data))->container = container;
847   ((startLink_t)(event->data))->sourceContainer = sourceContainer;
848   ((startLink_t)(event->data))->value = xbt_strdup(value);
849   ((startLink_t)(event->data))->key = xbt_strdup(key);
850
851   //print it
852   event->print (event);
853
854   //destroy it
855   xbt_free (((startLink_t)(event->data))->value);
856   xbt_free (((startLink_t)(event->data))->key);
857   xbt_free (event->data);
858   xbt_free (event);
859   event = NULL;
860 }
861
862 void new_pajeEndLink (double timestamp, container_t container, type_t type, container_t destContainer, const char *value, const char *key)
863 {
864   paje_event_t event = xbt_new0(s_paje_event_t, 1);
865   event->event_type = PAJE_EndLink;
866   event->id = pajeEndLinkId;
867   event->timestamp = timestamp;
868   event->print = print_pajeEndLink;
869   event->data = xbt_new0(s_endLink_t, 1);
870   ((endLink_t)(event->data))->type = type;
871   ((endLink_t)(event->data))->container = container;
872   ((endLink_t)(event->data))->destContainer = destContainer;
873   ((endLink_t)(event->data))->value = xbt_strdup(value);
874   ((endLink_t)(event->data))->key = xbt_strdup(key);
875
876   //print it
877   event->print (event);
878
879   //destroy it
880   xbt_free (((endLink_t)(event->data))->value);
881   xbt_free (((endLink_t)(event->data))->key);
882   xbt_free (event->data);
883   xbt_free (event);
884   event = NULL;
885 }
886
887 void new_pajeNewEvent (double timestamp, container_t container, type_t type, const char *value)
888 {
889   paje_event_t event = xbt_new0(s_paje_event_t, 1);
890   event->event_type = PAJE_NewEvent;
891   event->id = pajeNewEventId;
892   event->timestamp = timestamp;
893   event->print = print_pajeNewEvent;
894   event->data = xbt_new0(s_newEvent_t, 1);
895   ((newEvent_t)(event->data))->type = type;
896   ((newEvent_t)(event->data))->container = container;
897   ((newEvent_t)(event->data))->value = xbt_strdup(value);
898
899   //print it
900   event->print (event);
901
902   //destroy it
903   xbt_free (((newEvent_t)(event->data))->value);
904   xbt_free (event->data);
905   xbt_free (event);
906   event = NULL;
907 }
908 //
909 //void pajeNewEvent(double time, const char *entityType,
910 //                  const char *container, const char *value)
911 //{
912 //  INSTR_PAJE_ASSERT(entityType);
913 //  INSTR_PAJE_ASSERT(container);
914 //  INSTR_PAJE_ASSERT(value);
915 //
916 //  if (time == 0){
917 //    fprintf(tracing_file, "%d 0 %s %s %s\n", pajeNewEventId,
918 //          entityType, container, value);
919 //  }else{
920 //    fprintf(tracing_file, "%d %lf %s %s %s\n", pajeNewEventId, time,
921 //          entityType, container, value);
922 //  }
923 //}
924
925 #endif /* HAVE_TRACING */