00001 #include "flowlist.h"
00002 #include<stdlib.h>
00003 #include<stdio.h>
00004
00005 struct flow_list *create_new_flow_event(double time, double bw){
00006 struct flow_list *new_node;
00007 new_node = (struct flow_list*)malloc(sizeof(struct flow_list));
00008 new_node->time = time;
00009 new_node->bw = bw;
00010 new_node->next = NULL;
00011 return(new_node);
00012 }
00013
00014
00015
00016 void flow_list_insert(double time,double bw, struct flow_list **root){
00017 struct flow_list* node;
00018 struct flow_list *new_node;
00019
00020 if(*root==NULL){
00021 new_node = create_new_flow_event(time,bw);
00022 *root = new_node;
00023 }
00024 else if((*root)->time > time){
00025 new_node = create_new_flow_event(time,bw);
00026 new_node->next = (*root);
00027 *root = new_node;
00028 }
00029 else if((*root)->time == time){
00030 (*root)->bw+=bw;
00031 }
00032 else{
00033 for(node = (*root); node->next != NULL && node->next->time < time ;node = node->next);
00034
00035 if(node->next == NULL){
00036 new_node = create_new_flow_event(time,bw);
00037 node->next = new_node;
00038 }
00039 else if(node->next->time==time){
00040 node->next->bw += bw;
00041 }
00042 else{
00043 new_node = create_new_flow_event(time,bw);
00044 new_node->next=node->next;
00045 node->next = new_node;
00046 }
00047 }
00048 return;
00049 }
00050
00051
00052 void dump_flow_list_to_file(FILE* file, struct flow_list* root){
00053 struct flow_list *node;
00054 double total_bw = 0;
00055 for(node=root;node!=NULL;node=node->next){
00056 total_bw+=node->bw;
00057 fprintf(file,"%lf %lf %lf\n",node->time,node->bw,total_bw);
00058 }
00059 }
00060
00061
00062 int get_no_events(struct flow_list *root){
00063 int NoNodes;
00064 struct flow_list *node;
00065 for(node=root,NoNodes=0;node!=NULL;node=node->next,NoNodes++);
00066 return(NoNodes);
00067 }
00068
00069 struct flow_event* get_all_events(struct flow_list *root){
00070 int NoNodes=0;
00071 int i;
00072 struct flow_event *allEvents;
00073 struct flow_list *node;
00074
00075 NoNodes = get_no_events(root);
00076
00077 allEvents = (struct flow_event*)malloc(NoNodes*sizeof(struct flow_event));
00078 for(node=root,i=0;node!=NULL;node=node->next,i++){
00079 allEvents[i].delay = node->time;
00080 allEvents[i].deltaCBR = node->bw;
00081 if(i==0)
00082 allEvents[i].NetCBR = node->bw;
00083 else
00084 allEvents[i].NetCBR = allEvents[i-1].NetCBR + node->bw;
00085 }
00086 return(allEvents);
00087 }
00088
00089
00090
00091
00092
00093
00094
00095