Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
4bd20818f8d468306316b7ae45257dc30e491408
[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 static xbt_dynar_t buffer = NULL;
149
150 void TRACE_paje_start(void)
151 {
152   char *filename = TRACE_get_filename();
153   tracing_file = fopen(filename, "w");
154   xbt_assert1 (tracing_file != NULL, "Tracefile %s could not be opened for writing.", filename);
155
156   DEBUG1("Filename %s is open for writing", filename);
157
158   /* output header */
159   TRACE_paje_create_header();
160
161   buffer = xbt_dynar_new (sizeof(paje_event_t), NULL);
162 }
163
164 void TRACE_paje_end(void)
165 {
166   fclose(tracing_file);
167   char *filename = TRACE_get_filename();
168   DEBUG1("Filename %s is closed", filename);
169 }
170
171 void TRACE_paje_dump_buffer (void)
172 {
173   paje_event_t event;
174   while (xbt_dynar_length (buffer) > 0){
175     xbt_dynar_remove_at (buffer, 0, &event);
176     event->print (event);
177   }
178 }
179
180 void TRACE_paje_create_header(void)
181 {
182   DEBUG0 ("Define paje header");
183   fprintf(tracing_file, "\
184 %%EventDef PajeDefineContainerType %d \n\
185 %%       Alias string \n\
186 %%       ContainerType string \n\
187 %%       Name string \n\
188 %%EndEventDef \n\
189 %%EventDef PajeDefineVariableType %d \n\
190 %%       Alias string \n\
191 %%       ContainerType string \n\
192 %%       Name string \n\
193 %%       Color color \n\
194 %%EndEventDef \n\
195 %%EventDef PajeDefineStateType %d \n\
196 %%       Alias string \n\
197 %%       ContainerType string \n\
198 %%       Name string \n\
199 %%EndEventDef \n\
200 %%EventDef PajeDefineEventType %d \n\
201 %%       Alias string \n\
202 %%       EntityType string \n\
203 %%       Name string \n\
204 %%       Color color \n\
205 %%EndEventDef \n\
206 %%EventDef PajeDefineLinkType %d \n\
207 %%       Alias string \n\
208 %%       ContainerType string \n\
209 %%       SourceContainerType string \n\
210 %%       DestContainerType string \n\
211 %%       Name string \n\
212 %%EndEventDef \n\
213 %%EventDef PajeCreateContainer %d \n\
214 %%       Time date \n\
215 %%       Alias string \n\
216 %%       Type string \n\
217 %%       Container string \n\
218 %%       Name string \n\
219 %%EndEventDef \n\
220 %%EventDef PajeDestroyContainer %d \n\
221 %%       Time date \n\
222 %%       Type string \n\
223 %%       Container string \n\
224 %%EndEventDef \n\
225 %%EventDef PajeSetVariable %d \n\
226 %%       Time date \n\
227 %%       EntityType string \n\
228 %%       Container string \n\
229 %%       Value string \n\
230 %%EndEventDef\n\
231 %%EventDef PajeAddVariable %d \n\
232 %%       Time date \n\
233 %%       EntityType string \n\
234 %%       Container string \n\
235 %%       Value string \n\
236 %%EndEventDef\n\
237 %%EventDef PajeSubVariable %d \n\
238 %%       Time date \n\
239 %%       EntityType string \n\
240 %%       Container string \n\
241 %%       Value string \n\
242 %%EndEventDef\n\
243 %%EventDef PajeSetState %d \n\
244 %%       Time date \n\
245 %%       EntityType string \n\
246 %%       Container string \n\
247 %%       Value string \n\
248 %%EndEventDef\n\
249 %%EventDef PajePushState %d \n\
250 %%       Time date \n\
251 %%       EntityType string \n\
252 %%       Container string \n\
253 %%       Value string \n\
254 %%EndEventDef\n\
255 %%EventDef PajePopState %d \n\
256 %%       Time date \n\
257 %%       EntityType string \n\
258 %%       Container string \n\
259 %%EndEventDef\n\
260 %%EventDef PajeStartLink %d \n\
261 %%       Time date \n\
262 %%       EntityType string \n\
263 %%       Container string \n\
264 %%       Value string \n\
265 %%       SourceContainer string \n\
266 %%       Key string \n\
267 %%EndEventDef\n\
268 %%EventDef PajeEndLink %d \n\
269 %%       Time date \n\
270 %%       EntityType string \n\
271 %%       Container string \n\
272 %%       Value string \n\
273 %%       DestContainer string \n\
274 %%       Key string \n\
275 %%EndEventDef\n\
276 %%EventDef PajeNewEvent %d \n\
277 %%       Time date \n\
278 %%       EntityType string \n\
279 %%       Container string \n\
280 %%       Value string \n\
281 %%EndEventDef\n",
282   PAJE_DefineContainerType,
283   PAJE_DefineVariableType,
284   PAJE_DefineStateType,
285   PAJE_DefineEventType,
286   PAJE_DefineLinkType,
287   PAJE_CreateContainer,
288   PAJE_DestroyContainer,
289   PAJE_SetVariable,
290   PAJE_AddVariable,
291   PAJE_SubVariable,
292   PAJE_SetState,
293   PAJE_PushState,
294   PAJE_PopState,
295   PAJE_StartLink,
296   PAJE_EndLink,
297   PAJE_NewEvent);
298 }
299
300 /* internal do the instrumentation module */
301 static void insert_into_buffer (paje_event_t tbi)
302 {
303   unsigned int i;
304   if (xbt_dynar_length(buffer) == 0){
305     xbt_dynar_push (buffer, &tbi);
306   }else{
307     int inserted = 0;
308     for (i = 0; i < xbt_dynar_length(buffer); i++){
309       paje_event_t e1 = *(paje_event_t*)xbt_dynar_get_ptr(buffer, i);
310       if (e1->timestamp > tbi->timestamp){
311         xbt_dynar_insert_at (buffer, i, &tbi);
312         inserted = 1;
313         break;
314       }
315     }
316     if (!inserted){
317       xbt_dynar_push (buffer, &tbi);
318     }
319   }
320 }
321
322 static void print_pajeDefineContainerType(paje_event_t event)
323 {
324   fprintf(tracing_file, "%d %s %s %s\n",
325       event->event_type,
326       ((defineContainerType_t)event->data)->type->id,
327       ((defineContainerType_t)event->data)->type->father->id,
328       ((defineContainerType_t)event->data)->type->name);
329 }
330
331 static void print_pajeDefineVariableType(paje_event_t event)
332 {
333   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
334       event->event_type,
335       ((defineVariableType_t)event->data)->type->id,
336       ((defineVariableType_t)event->data)->type->father->id,
337       ((defineVariableType_t)event->data)->type->name,
338       ((defineVariableType_t)event->data)->type->color);
339 }
340
341 static void print_pajeDefineStateType(paje_event_t event)
342 {
343   fprintf(tracing_file, "%d %s %s %s\n",
344       event->event_type,
345       ((defineStateType_t)event->data)->type->id,
346       ((defineStateType_t)event->data)->type->father->id,
347       ((defineStateType_t)event->data)->type->name);
348 }
349
350 static void print_pajeDefineEventType(paje_event_t event)
351 {
352   fprintf(tracing_file, "%d %s %s %s \"%s\"\n",
353       event->event_type,
354       ((defineEventType_t)event->data)->type->id,
355       ((defineEventType_t)event->data)->type->father->id,
356       ((defineEventType_t)event->data)->type->name,
357       ((defineEventType_t)event->data)->type->color);
358 }
359
360 static void print_pajeDefineLinkType(paje_event_t event)
361 {
362   fprintf(tracing_file, "%d %s %s %s %s %s\n",
363       event->event_type,
364       ((defineLinkType_t)event->data)->type->id,
365       ((defineLinkType_t)event->data)->type->father->id,
366       ((defineLinkType_t)event->data)->source->id,
367       ((defineLinkType_t)event->data)->dest->id,
368       ((defineLinkType_t)event->data)->type->name);
369 }
370
371 static void print_pajeCreateContainer(paje_event_t event)
372 {
373   if (event->timestamp == 0){
374     fprintf(tracing_file, "%d 0 %s %s %s %s\n",
375         event->event_type,
376         ((createContainer_t)event->data)->container->id,
377         ((createContainer_t)event->data)->container->type->id,
378         ((createContainer_t)event->data)->container->father->id,
379         ((createContainer_t)event->data)->container->name);
380   }else{
381     fprintf(tracing_file, "%d %lf %s %s %s %s\n",
382         event->event_type,
383         event->timestamp,
384         ((createContainer_t)event->data)->container->id,
385         ((createContainer_t)event->data)->container->type->id,
386         ((createContainer_t)event->data)->container->father->id,
387         ((createContainer_t)event->data)->container->name);
388   }
389 }
390
391 static void print_pajeDestroyContainer(paje_event_t event)
392 {
393   if (event->timestamp == 0){
394     fprintf(tracing_file, "%d 0 %s %s\n",
395         event->event_type,
396         ((destroyContainer_t)event->data)->container->type->id,
397         ((destroyContainer_t)event->data)->container->id);
398   }else{
399     fprintf(tracing_file, "%d %lf %s %s\n",
400         event->event_type,
401         event->timestamp,
402         ((destroyContainer_t)event->data)->container->type->id,
403         ((destroyContainer_t)event->data)->container->id);
404   }
405 }
406
407 static void print_pajeSetVariable(paje_event_t event)
408 {
409   if (event->timestamp == 0){
410     fprintf(tracing_file, "%d 0 %s %s %f\n",
411         event->event_type,
412         ((setVariable_t)event->data)->type->id,
413         ((setVariable_t)event->data)->container->id,
414         ((setVariable_t)event->data)->value);
415   }else{
416     fprintf(tracing_file, "%d %lf %s %s %f\n",
417         event->event_type,
418         event->timestamp,
419         ((setVariable_t)event->data)->type->id,
420         ((setVariable_t)event->data)->container->id,
421         ((setVariable_t)event->data)->value);
422   }
423 }
424
425 static void print_pajeAddVariable(paje_event_t event)
426 {
427   if (event->timestamp == 0){
428     fprintf(tracing_file, "%d 0 %s %s %f\n",
429         event->event_type,
430         ((addVariable_t)event->data)->type->id,
431         ((addVariable_t)event->data)->container->id,
432         ((addVariable_t)event->data)->value);
433   }else{
434     fprintf(tracing_file, "%d %lf %s %s %f\n",
435         event->event_type,
436         event->timestamp,
437         ((addVariable_t)event->data)->type->id,
438         ((addVariable_t)event->data)->container->id,
439         ((addVariable_t)event->data)->value);
440   }
441 }
442
443 static void print_pajeSubVariable(paje_event_t event)
444 {
445   if (event->timestamp == 0){
446     fprintf(tracing_file, "%d 0 %s %s %f\n",
447         event->event_type,
448         ((subVariable_t)event->data)->type->id,
449         ((subVariable_t)event->data)->container->id,
450         ((subVariable_t)event->data)->value);
451   }else{
452     fprintf(tracing_file, "%d %lf %s %s %f\n",
453         event->event_type,
454         event->timestamp,
455         ((subVariable_t)event->data)->type->id,
456         ((subVariable_t)event->data)->container->id,
457         ((subVariable_t)event->data)->value);
458   }
459 }
460
461 static void print_pajeSetState(paje_event_t event)
462 {
463   if (event->timestamp == 0){
464     fprintf(tracing_file, "%d 0 %s %s %s\n",
465         event->event_type,
466         ((setState_t)event->data)->type->id,
467         ((setState_t)event->data)->container->id,
468         ((setState_t)event->data)->value);
469   }else{
470     fprintf(tracing_file, "%d %lf %s %s %s\n",
471         event->event_type,
472         event->timestamp,
473         ((setState_t)event->data)->type->id,
474         ((setState_t)event->data)->container->id,
475         ((setState_t)event->data)->value);
476   }
477 }
478
479 static void print_pajePushState(paje_event_t event)
480 {
481   if (event->timestamp == 0){
482     fprintf(tracing_file, "%d 0 %s %s %s\n",
483         event->event_type,
484         ((pushState_t)event->data)->type->id,
485         ((pushState_t)event->data)->container->id,
486         ((pushState_t)event->data)->value);
487   }else{
488     fprintf(tracing_file, "%d %lf %s %s %s\n",
489         event->event_type,
490         event->timestamp,
491         ((pushState_t)event->data)->type->id,
492         ((pushState_t)event->data)->container->id,
493         ((pushState_t)event->data)->value);
494   }
495 }
496
497 static void print_pajePopState(paje_event_t event)
498 {
499   if (event->timestamp == 0){
500     fprintf(tracing_file, "%d 0 %s %s\n",
501         event->event_type,
502         ((popState_t)event->data)->type->id,
503         ((popState_t)event->data)->container->id);
504   }else{
505     fprintf(tracing_file, "%d %lf %s %s\n",
506         event->event_type,
507         event->timestamp,
508         ((popState_t)event->data)->type->id,
509         ((popState_t)event->data)->container->id);
510   }
511 }
512
513 static void print_pajeStartLink(paje_event_t event)
514 {
515   if (event->timestamp == 0){
516     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
517         event->event_type,
518         ((startLink_t)event->data)->type->id,
519         ((startLink_t)event->data)->container->id,
520         ((startLink_t)event->data)->value,
521         ((startLink_t)event->data)->sourceContainer->id,
522         ((startLink_t)event->data)->key);
523   }else {
524     fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
525         event->event_type,
526         event->timestamp,
527         ((startLink_t)event->data)->type->id,
528         ((startLink_t)event->data)->container->id,
529         ((startLink_t)event->data)->value,
530         ((startLink_t)event->data)->sourceContainer->id,
531         ((startLink_t)event->data)->key);
532   }
533 }
534
535 static void print_pajeEndLink(paje_event_t event)
536 {
537   if (event->timestamp == 0){
538     fprintf(tracing_file, "%d 0 %s %s %s %s %s\n",
539         event->event_type,
540         ((endLink_t)event->data)->type->id,
541         ((endLink_t)event->data)->container->id,
542         ((endLink_t)event->data)->value,
543         ((endLink_t)event->data)->destContainer->id,
544         ((endLink_t)event->data)->key);
545   }else {
546     fprintf(tracing_file, "%d %lf %s %s %s %s %s\n",
547         event->event_type,
548         event->timestamp,
549         ((endLink_t)event->data)->type->id,
550         ((endLink_t)event->data)->container->id,
551         ((endLink_t)event->data)->value,
552         ((endLink_t)event->data)->destContainer->id,
553         ((endLink_t)event->data)->key);
554   }
555 }
556
557 static void print_pajeNewEvent (paje_event_t event)
558 {
559   if (event->timestamp == 0){
560     fprintf(tracing_file, "%d 0 %s %s %s\n",
561         event->event_type,
562         ((newEvent_t)event->data)->type->id,
563         ((newEvent_t)event->data)->container->id,
564         ((newEvent_t)event->data)->value);
565   }else{
566     fprintf(tracing_file, "%d %lf %s %s %s\n",
567         event->event_type,
568         event->timestamp,
569         ((newEvent_t)event->data)->type->id,
570         ((newEvent_t)event->data)->container->id,
571         ((newEvent_t)event->data)->value);
572   }
573 }
574
575 void new_pajeDefineContainerType(type_t type)
576 {
577   paje_event_t event = xbt_new0(s_paje_event_t, 1);
578   event->event_type = PAJE_DefineContainerType;
579   event->timestamp = 0;
580   event->print = print_pajeDefineContainerType;
581   event->data = xbt_new0(s_defineContainerType_t, 1);
582   ((defineContainerType_t)(event->data))->type = type;
583
584   //print it
585   event->print (event);
586
587   //destroy it
588   xbt_free (event->data);
589   xbt_free (event);
590   event = NULL;
591 }
592
593 void new_pajeDefineVariableType(type_t type)
594 {
595   paje_event_t event = xbt_new0(s_paje_event_t, 1);
596   event->event_type = PAJE_DefineVariableType;
597   event->timestamp = 0;
598   event->print = print_pajeDefineVariableType;
599   event->data = xbt_new0(s_defineVariableType_t, 1);
600   ((defineVariableType_t)(event->data))->type = type;
601
602   //print it
603   event->print (event);
604
605   //destroy it
606   xbt_free (event->data);
607   xbt_free (event);
608   event = NULL;
609 }
610
611 void new_pajeDefineStateType(type_t type)
612 {
613   paje_event_t event = xbt_new0(s_paje_event_t, 1);
614   event->event_type = PAJE_DefineStateType;
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->timestamp = 0;
634   event->print = print_pajeDefineEventType;
635   event->data = xbt_new0(s_defineEventType_t, 1);
636   ((defineEventType_t)(event->data))->type = type;
637
638   //print it
639   event->print (event);
640
641   //destroy it
642   xbt_free (event->data);
643   xbt_free (event);
644   event = NULL;
645 }
646
647 void new_pajeDefineLinkType(type_t type, type_t source, type_t dest)
648 {
649   paje_event_t event = xbt_new0(s_paje_event_t, 1);
650   event->event_type = PAJE_DefineLinkType;
651   event->timestamp = 0;
652   event->print = print_pajeDefineLinkType;
653   event->data = xbt_new0(s_defineLinkType_t, 1);
654   ((defineLinkType_t)(event->data))->type = type;
655   ((defineLinkType_t)(event->data))->source = source;
656   ((defineLinkType_t)(event->data))->dest = dest;
657
658   //print it
659   event->print (event);
660
661   //destroy it
662   xbt_free (event->data);
663   xbt_free (event);
664   event = NULL;
665 }
666
667 void new_pajeCreateContainer (container_t container)
668 {
669   paje_event_t event = xbt_new0(s_paje_event_t, 1);
670   event->event_type = PAJE_CreateContainer;
671   event->timestamp = SIMIX_get_clock();
672   event->print = print_pajeCreateContainer;
673   event->data = xbt_new0(s_createContainer_t, 1);
674   ((createContainer_t)(event->data))->container = container;
675
676   //print it
677   event->print (event);
678
679   //destroy it
680   xbt_free (event->data);
681   xbt_free (event);
682   event = NULL;
683 }
684
685 void new_pajeDestroyContainer (container_t container)
686 {
687   paje_event_t event = xbt_new0(s_paje_event_t, 1);
688   event->event_type = PAJE_DestroyContainer;
689   event->timestamp = SIMIX_get_clock();
690   event->print = print_pajeDestroyContainer;
691   event->data = xbt_new0(s_destroyContainer_t, 1);
692   ((destroyContainer_t)(event->data))->container = container;
693
694   //print it
695   event->print (event);
696
697   //destroy it
698   xbt_free (event->data);
699   xbt_free (event);
700   event = NULL;
701 }
702
703 void new_pajeSetVariable (double timestamp, container_t container, type_t type, double value)
704 {
705   paje_event_t event = xbt_new0(s_paje_event_t, 1);
706   event->event_type = PAJE_SetVariable;
707   event->timestamp = timestamp;
708   event->print = print_pajeSetVariable;
709   event->data = xbt_new0(s_setVariable_t, 1);
710   ((setVariable_t)(event->data))->type = type;
711   ((setVariable_t)(event->data))->container = container;
712   ((setVariable_t)(event->data))->value = value;
713
714   insert_into_buffer (event);
715   return;
716
717   //print it
718   event->print (event);
719
720   //destroy it
721   xbt_free (event->data);
722   xbt_free (event);
723   event = NULL;
724 }
725
726
727 void new_pajeAddVariable (double timestamp, container_t container, type_t type, double value)
728 {
729   paje_event_t event = xbt_new0(s_paje_event_t, 1);
730   event->event_type = PAJE_AddVariable;
731   event->timestamp = timestamp;
732   event->print = print_pajeAddVariable;
733   event->data = xbt_new0(s_addVariable_t, 1);
734   ((addVariable_t)(event->data))->type = type;
735   ((addVariable_t)(event->data))->container = container;
736   ((addVariable_t)(event->data))->value = value;
737
738   insert_into_buffer (event);
739   return;
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->timestamp = timestamp;
755   event->print = print_pajeSubVariable;
756   event->data = xbt_new0(s_subVariable_t, 1);
757   ((subVariable_t)(event->data))->type = type;
758   ((subVariable_t)(event->data))->container = container;
759   ((subVariable_t)(event->data))->value = value;
760
761   insert_into_buffer (event);
762   return;
763
764   //print it
765   event->print (event);
766
767   //destroy it
768   xbt_free (event->data);
769   xbt_free (event);
770   event = NULL;
771 }
772
773 void new_pajeSetState (double timestamp, container_t container, type_t type, const char *value)
774 {
775   paje_event_t event = xbt_new0(s_paje_event_t, 1);
776   event->event_type = PAJE_SetState;
777   event->timestamp = timestamp;
778   event->print = print_pajeSetState;
779   event->data = xbt_new0(s_setState_t, 1);
780   ((setState_t)(event->data))->type = type;
781   ((setState_t)(event->data))->container = container;
782   ((setState_t)(event->data))->value = xbt_strdup(value);
783
784   insert_into_buffer (event);
785   return;
786
787   //print it
788   event->print (event);
789
790   //destroy it
791   xbt_free (((setState_t)(event->data))->value);
792   xbt_free (event->data);
793   xbt_free (event);
794   event = NULL;
795 }
796
797
798 void new_pajePushState (double timestamp, container_t container, type_t type, const char *value)
799 {
800   paje_event_t event = xbt_new0(s_paje_event_t, 1);
801   event->event_type = PAJE_PushState;
802   event->timestamp = timestamp;
803   event->print = print_pajePushState;
804   event->data = xbt_new0(s_pushState_t, 1);
805   ((pushState_t)(event->data))->type = type;
806   ((pushState_t)(event->data))->container = container;
807   ((pushState_t)(event->data))->value = xbt_strdup(value);
808
809   insert_into_buffer (event);
810   return;
811
812   //print it
813   event->print (event);
814
815   //destroy it
816   xbt_free (((pushState_t)(event->data))->value);
817   xbt_free (event->data);
818   xbt_free (event);
819   event = NULL;
820 }
821
822
823 void new_pajePopState (double timestamp, container_t container, type_t type)
824 {
825   paje_event_t event = xbt_new0(s_paje_event_t, 1);
826   event->event_type = PAJE_PopState;
827   event->timestamp = timestamp;
828   event->print = print_pajePopState;
829   event->data = xbt_new0(s_popState_t, 1);
830   ((popState_t)(event->data))->type = type;
831   ((popState_t)(event->data))->container = container;
832
833   insert_into_buffer (event);
834   return;
835
836   //print it
837   event->print (event);
838
839   //destroy it
840   xbt_free (event->data);
841   xbt_free (event);
842   event = NULL;
843 }
844
845 void new_pajeStartLink (double timestamp, container_t container, type_t type, container_t sourceContainer, const char *value, const char *key)
846 {
847   paje_event_t event = xbt_new0(s_paje_event_t, 1);
848   event->event_type = PAJE_StartLink;
849   event->timestamp = timestamp;
850   event->print = print_pajeStartLink;
851   event->data = xbt_new0(s_startLink_t, 1);
852   ((startLink_t)(event->data))->type = type;
853   ((startLink_t)(event->data))->container = container;
854   ((startLink_t)(event->data))->sourceContainer = sourceContainer;
855   ((startLink_t)(event->data))->value = xbt_strdup(value);
856   ((startLink_t)(event->data))->key = xbt_strdup(key);
857
858   insert_into_buffer (event);
859   return;
860
861   //print it
862   event->print (event);
863
864   //destroy it
865   xbt_free (((startLink_t)(event->data))->value);
866   xbt_free (((startLink_t)(event->data))->key);
867   xbt_free (event->data);
868   xbt_free (event);
869   event = NULL;
870 }
871
872 void new_pajeEndLink (double timestamp, container_t container, type_t type, container_t destContainer, const char *value, const char *key)
873 {
874   paje_event_t event = xbt_new0(s_paje_event_t, 1);
875   event->event_type = PAJE_EndLink;
876   event->timestamp = timestamp;
877   event->print = print_pajeEndLink;
878   event->data = xbt_new0(s_endLink_t, 1);
879   ((endLink_t)(event->data))->type = type;
880   ((endLink_t)(event->data))->container = container;
881   ((endLink_t)(event->data))->destContainer = destContainer;
882   ((endLink_t)(event->data))->value = xbt_strdup(value);
883   ((endLink_t)(event->data))->key = xbt_strdup(key);
884
885   insert_into_buffer (event);
886   return;
887
888   //print it
889   event->print (event);
890
891   //destroy it
892   xbt_free (((endLink_t)(event->data))->value);
893   xbt_free (((endLink_t)(event->data))->key);
894   xbt_free (event->data);
895   xbt_free (event);
896   event = NULL;
897 }
898
899 void new_pajeNewEvent (double timestamp, container_t container, type_t type, const char *value)
900 {
901   paje_event_t event = xbt_new0(s_paje_event_t, 1);
902   event->event_type = PAJE_NewEvent;
903   event->timestamp = timestamp;
904   event->print = print_pajeNewEvent;
905   event->data = xbt_new0(s_newEvent_t, 1);
906   ((newEvent_t)(event->data))->type = type;
907   ((newEvent_t)(event->data))->container = container;
908   ((newEvent_t)(event->data))->value = xbt_strdup(value);
909
910   insert_into_buffer (event);
911   return;
912
913   //print it
914   event->print (event);
915
916   //destroy it
917   xbt_free (((newEvent_t)(event->data))->value);
918   xbt_free (event->data);
919   xbt_free (event);
920   event = NULL;
921 }
922 //
923 //void pajeNewEvent(double time, const char *entityType,
924 //                  const char *container, const char *value)
925 //{
926 //  INSTR_PAJE_ASSERT(entityType);
927 //  INSTR_PAJE_ASSERT(container);
928 //  INSTR_PAJE_ASSERT(value);
929 //
930 //  if (time == 0){
931 //    fprintf(tracing_file, "%d 0 %s %s %s\n", pajeNewEventId,
932 //          entityType, container, value);
933 //  }else{
934 //    fprintf(tracing_file, "%d %lf %s %s %s\n", pajeNewEventId, time,
935 //          entityType, container, value);
936 //  }
937 //}
938
939 #endif /* HAVE_TRACING */