flowlist.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:2k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #include "flowlist.h"
  2. #include<stdlib.h>
  3. #include<stdio.h>
  4. struct flow_list *create_new_flow_event(double time, double bw){  
  5.     struct flow_list *new_node;
  6.     new_node = (struct flow_list*)malloc(sizeof(struct flow_list));
  7.     new_node->time = time;
  8.     new_node->bw = bw;
  9.     new_node->next = NULL;
  10.     return(new_node);
  11. }
  12. void flow_list_insert(double time,double bw, struct flow_list **root){
  13. struct flow_list* node;
  14. struct flow_list *new_node;
  15.   if(*root==NULL){
  16.     new_node = create_new_flow_event(time,bw);
  17.     *root = new_node;
  18.   }
  19.   else if((*root)->time > time){
  20.     new_node = create_new_flow_event(time,bw);
  21.     new_node->next = (*root);
  22.     *root = new_node;
  23.   }
  24.   else if((*root)->time == time){
  25.     (*root)->bw+=bw;
  26.   }
  27.   else{
  28.     for(node = (*root); node->next != NULL && node->next->time < time ;node = node->next);    
  29.     
  30.     if(node->next == NULL){
  31.       new_node = create_new_flow_event(time,bw);
  32.       node->next = new_node;
  33.     }
  34.     else if(node->next->time==time){
  35.       node->next->bw += bw;
  36.     }
  37.     else{
  38.       new_node = create_new_flow_event(time,bw);
  39.       new_node->next=node->next;
  40.       node->next = new_node;
  41.     }
  42.   }
  43. return;
  44. }
  45. void dump_flow_list_to_file(FILE* file, struct flow_list* root){
  46.   struct flow_list *node;
  47.   double total_bw = 0;
  48.   for(node=root;node!=NULL;node=node->next){
  49.     total_bw+=node->bw;
  50.     fprintf(file,"%lf %lf %lfn",node->time,node->bw,total_bw);
  51.   }
  52. }
  53. int get_no_events(struct flow_list *root){
  54.   int NoNodes;
  55.   struct flow_list *node;
  56.   for(node=root,NoNodes=0;node!=NULL;node=node->next,NoNodes++);
  57.   return(NoNodes);
  58. }
  59. struct flow_event* get_all_events(struct flow_list *root){
  60.   int NoNodes=0;
  61.   int i;
  62.   struct flow_event *allEvents;
  63.   struct flow_list *node;
  64.   NoNodes = get_no_events(root);
  65.   allEvents = (struct flow_event*)malloc(NoNodes*sizeof(struct flow_event));
  66.   for(node=root,i=0;node!=NULL;node=node->next,i++){
  67.     allEvents[i].delay = node->time;
  68.     allEvents[i].deltaCBR = node->bw;
  69.     if(i==0)
  70.       allEvents[i].NetCBR = node->bw;
  71.     else
  72.       allEvents[i].NetCBR = allEvents[i-1].NetCBR + node->bw;
  73.   }
  74.   return(allEvents);
  75. }