Logo AND Algorithmique Numérique Distribuée

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