Logo AND Algorithmique Numérique Distribuée

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