⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bandwidth_filter.cc

📁 这是一个著名的应用层组播中间件的源码
💻 CC
字号:
//Copyright (c) 2004, Charles Killian, Adolfo Rodriguez, Dejan Kostic, Sooraj Bhat, and Amin Vahdat//All rights reserved.////Redistribution and use in source and binary forms, with or without//modification, are permitted provided that the following conditions are met:////   * Redistributions of source code must retain the above copyright//     notice, this list of conditions and the following disclaimer.//   * Redistributions in binary form must reproduce the above copyright//     notice, this list of conditions and the following disclaimer in//     the documentation and/or other materials provided with the//     distribution.//   * Neither the names of Duke University nor The University of//     California, San Diego, nor the names of its contributors//     may be used to endorse or promote products derived from//     this software without specific prior written permission.////THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"//AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE//IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE//DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE//FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL//DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR//SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,//OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE//USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#include "bandwidth_filter.h"#include <stdio.h>#include "scheduler.h"#include "macedon.h"bandwidth_filter::bandwidth_filter( ){  history_count =0;  value = 0.0;  time_initial = Scheduler::instance().clock();}bandwidth_filter::~bandwidth_filter(){}// ---------------------------------------------- // get_value// ---------------------------------------------- double  bandwidth_filter::get_value (){  check();  double result = value;  return  result;}// ---------------------------------------------- // clear// ---------------------------------------------- void  bandwidth_filter::clear (){  history.clear ();  value = 0.0;}// ---------------------------------------------- // update// ---------------------------------------------- void  bandwidth_filter::update (int size){  double now =  Scheduler::instance().clock();  history.push_back (bandwidth_pair (size,now));  history_count++;  check();}// ---------------------------------------------- // check// ---------------------------------------------- void bandwidth_filter::check (){  double elapsed_time;  double now = Scheduler::instance().clock();  while (history_count && (now - history.front().when)> BANDWIDTH_WINDOW) {    history.pop_front();    history_count--;  }          if (history_count == 0 ) {    value = 0.0;  }  else {    if (now-time_initial < BANDWIDTH_WINDOW)      elapsed_time = now-time_initial;    else      elapsed_time = BANDWIDTH_WINDOW;    int total_bytes = 0;    for(list<bandwidth_pair>::iterator it =  history.begin();	it != history.end(); ++it)       {	bandwidth_pair r=*it;	total_bytes+=r.size;      }    value = total_bytes*8/elapsed_time;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -