Logo AND Algorithmique Numérique Distribuée

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