--- /dev/null
+#ifndef _FUNCTIONAL_H\r
+#define _FUNCTIONAL_H\r
+\r
+#include "trace.h"\r
+\r
+typedef struct EVENT_ENTRY\r
+{\r
+ char event_type;\r
+ int start_line;\r
+ int end_line;\r
+ int data_num;\r
+ char *channel_name;\r
+\r
+ EVENT_ENTRY *next;\r
+}EVENT_ENTRY;\r
+\r
+class Process_Trace\r
+{\r
+private:\r
+ char _process_name[NAME_LENGTH];\r
+ EVENT_ENTRY *_head;\r
+ EVENT_ENTRY *_tail;\r
+\r
+public:\r
+ Process_Trace(const char *process_name);\r
+ ~Process_Trace();\r
+\r
+ const char *get_name();\r
+ int add_entry(TRACE_EVENT *trace_event_ptr);\r
+ EVENT_ENTRY *get_head_entry();\r
+};\r
+\r
+class functional_trace\r
+{\r
+public:\r
+ char trace_file_name[NAME_LENGTH];\r
+ unsigned long event_num;\r
+ int file_index;\r
+\r
+ list<Process_Trace *> _list_process_trace;\r
+ list<Process_Trace *>::iterator _iter_process_trace;\r
+\r
+ functional_trace();\r
+ ~functional_trace();\r
+\r
+ void add_event_node(TRACE_EVENT &trace_event);\r
+ void create_computation_event(const char *process_name, int start_line, int end_line);\r
+ void create_read_event(const char *process_name, int data_num, const char *channel_name);\r
+ void create_write_event(const char *process_name, int data_num, const char *channel_name);\r
+ int write_to_file(const char *trace_file_name);\r
+ Process_Trace *get_process_trace(const char *process_name);\r
+ void free_traces();\r
+};\r
+\r
+extern functional_trace dol_functional_trace;\r
+\r
+#endif\r