flowlist.c

Go to the documentation of this file.
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 

Generated on Tue Mar 6 16:47:45 2007 for ns2 Network Simulator 2.29 by  doxygen 1.4.6