Logo AND Algorithmique Numérique Distribuée

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