亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? window.cpp

?? Last Update: Jan 22 2009 可靠UDP傳輸, 一套高效的基于windows平臺的C++ 開發庫
?? CPP
字號:
/*****************************************************************************Copyright (c) 2001 - 2008, The Board of Trustees of the University of Illinois.All rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditions aremet:* 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 name of the University of Illinois  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 "ASIS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULARPURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ORCONTRIBUTORS 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, ORPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OFLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDINGNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*****************************************************************************//*****************************************************************************written by   Yunhong Gu, last updated 12/06/2008*****************************************************************************/#include <cmath>#include "common.h"#include "window.h"CACKWindow::CACKWindow():m_piACKSeqNo(NULL),m_piACK(NULL),m_pTimeStamp(NULL),m_iSize(1024),m_iHead(0),m_iTail(0){   m_piACKSeqNo = new int32_t[m_iSize];   m_piACK = new int32_t[m_iSize];   m_pTimeStamp = new uint64_t[m_iSize];   m_piACKSeqNo[0] = -1;}CACKWindow::CACKWindow(const int& size):m_piACKSeqNo(NULL),m_piACK(NULL),m_pTimeStamp(NULL),m_iSize(size),m_iHead(0),m_iTail(0){   m_piACKSeqNo = new int32_t[m_iSize];   m_piACK = new int32_t[m_iSize];   m_pTimeStamp = new uint64_t[m_iSize];   m_piACKSeqNo[0] = -1;}CACKWindow::~CACKWindow(){   delete [] m_piACKSeqNo;   delete [] m_piACK;   delete [] m_pTimeStamp;}void CACKWindow::store(const int32_t& seq, const int32_t& ack){   m_piACKSeqNo[m_iHead] = seq;   m_piACK[m_iHead] = ack;   m_pTimeStamp[m_iHead] = CTimer::getTime();   m_iHead = (m_iHead + 1) % m_iSize;   // overwrite the oldest ACK since it is not likely to be acknowledged   if (m_iHead == m_iTail)      m_iTail = (m_iTail + 1) % m_iSize;}int CACKWindow::acknowledge(const int32_t& seq, int32_t& ack){   if (m_iHead >= m_iTail)   {      // Head has not exceeded the physical boundary of the window      for (int i = m_iTail, n = m_iHead; i < n; ++ i)         // looking for indentical ACK Seq. No.         if (seq == m_piACKSeqNo[i])         {            // return the Data ACK it carried            ack = m_piACK[i];            // calculate RTT            int rtt = int(CTimer::getTime() - m_pTimeStamp[i]);            if (i + 1 == m_iHead)            {               m_iTail = m_iHead = 0;               m_piACKSeqNo[0] = -1;            }            else               m_iTail = (i + 1) % m_iSize;            return rtt;         }      // Bad input, the ACK node has been overwritten      return -1;   }   // Head has exceeded the physical window boundary, so it is behind tail   for (int j = m_iTail, n = m_iHead + m_iSize; j < n; ++ j)      // looking for indentical ACK seq. no.      if (seq == m_piACKSeqNo[j % m_iSize])      {         // return Data ACK         j %= m_iSize;         ack = m_piACK[j];         // calculate RTT         int rtt = int(CTimer::getTime() - m_pTimeStamp[j]);         if (j == m_iHead)         {            m_iTail = m_iHead = 0;            m_piACKSeqNo[0] = -1;         }         else            m_iTail = (j + 1) % m_iSize;         return rtt;      }   // bad input, the ACK node has been overwritten   return -1;}////////////////////////////////////////////////////////////////////////////////CPktTimeWindow::CPktTimeWindow():m_iAWSize(16),m_piPktWindow(NULL),m_iPWSize(16),m_piProbeWindow(NULL){   m_piPktWindow = new int[m_iAWSize];   m_piProbeWindow = new int[m_iPWSize];   m_iPktWindowPtr = 0;   m_iProbeWindowPtr = 0;   m_LastArrTime = CTimer::getTime();   m_iLastSentTime = 0;   m_iMinPktSndInt = 1000000;   for (int i = 0; i < m_iAWSize; ++ i)      m_piPktWindow[i] = 1;   for (int k = 0; k < m_iPWSize; ++ k)      m_piProbeWindow[k] = 1000;}CPktTimeWindow::CPktTimeWindow(const int& asize, const int& psize):m_iAWSize(asize),m_piPktWindow(NULL),m_iPWSize(psize),m_piProbeWindow(NULL){   m_piPktWindow = new int[m_iAWSize];   m_piProbeWindow = new int[m_iPWSize];   m_iPktWindowPtr = 0;   m_iProbeWindowPtr = 0;   m_LastArrTime = CTimer::getTime();   m_iLastSentTime = 0;   m_iMinPktSndInt = 1000000;   for (int i = 0; i < m_iAWSize; ++ i)      m_piPktWindow[i] = 1;   for (int k = 0; k < m_iPWSize; ++ k)      m_piProbeWindow[k] = 1000;}CPktTimeWindow::~CPktTimeWindow(){   delete [] m_piPktWindow;   delete [] m_piProbeWindow;}int CPktTimeWindow::getMinPktSndInt() const{   return m_iMinPktSndInt;}int CPktTimeWindow::getPktRcvSpeed() const{   // sorting   int* pi = m_piPktWindow;   for (int i = 0, n = (m_iAWSize >> 1) + 1; i < n; ++ i)   {      int* pj = pi;      for (int j = i, m = m_iAWSize; j < m; ++ j)      {         if (*pi > *pj)         {            int temp = *pi;            *pi = *pj;            *pj = temp;         }         ++ pj;      }      ++ pi;   }   // read the median value   int median = (m_piPktWindow[(m_iAWSize >> 1) - 1] + m_piPktWindow[m_iAWSize >> 1]) >> 1;   int count = 0;   int sum = 0;   int upper = median << 3;   int lower = median >> 3;   // median filtering   int* pk = m_piPktWindow;   for (int k = 0, l = m_iAWSize; k < l; ++ k)   {      if ((*pk < upper) && (*pk > lower))      {         ++ count;         sum += *pk;      }      ++ pk;   }   // claculate speed, or return 0 if not enough valid value   if (count > (m_iAWSize >> 1))      return (int)ceil(1000000.0 / (sum / count));   else      return 0;}int CPktTimeWindow::getBandwidth() const{   // sorting   int* pi = m_piProbeWindow;   for (int i = 0, n = (m_iPWSize >> 1) + 1; i < n; ++ i)   {      int* pj = pi;      for (int j = i, m = m_iPWSize; j < m; ++ j)      {         if (*pi > *pj)         {            int temp = *pi;            *pi = *pj;            *pj = temp;         }         ++ pj;      }      ++ pi;   }   // read the median value   int median = (m_piProbeWindow[(m_iPWSize >> 1) - 1] + m_piProbeWindow[m_iPWSize >> 1]) >> 1;   int count = 1;   int sum = median;   int upper = median << 3;   int lower = median >> 3;   // median filtering   int* pk = m_piProbeWindow;   for (int k = 0, l = m_iPWSize; k < l; ++ k)   {      if ((*pk < upper) && (*pk > lower))      {         ++ count;         sum += *pk;      }      ++ pk;   }   return (int)ceil(1000000.0 / (double(sum) / double(count)));}void CPktTimeWindow::onPktSent(const int& currtime){   int interval = currtime - m_iLastSentTime;   if ((interval < m_iMinPktSndInt) && (interval > 0))      m_iMinPktSndInt = interval;   m_iLastSentTime = currtime;}void CPktTimeWindow::onPktArrival(){   m_CurrArrTime = CTimer::getTime();   // record the packet interval between the current and the last one   *(m_piPktWindow + m_iPktWindowPtr) = int(m_CurrArrTime - m_LastArrTime);   // the window is logically circular   ++ m_iPktWindowPtr;   if (m_iPktWindowPtr == m_iAWSize)      m_iPktWindowPtr = 0;   // remember last packet arrival time   m_LastArrTime = m_CurrArrTime;}void CPktTimeWindow::probe1Arrival(){   m_ProbeTime = CTimer::getTime();}void CPktTimeWindow::probe2Arrival(){   m_CurrArrTime = CTimer::getTime();   // record the probing packets interval   *(m_piProbeWindow + m_iProbeWindowPtr) = int(m_CurrArrTime - m_ProbeTime);   // the window is logically circular   ++ m_iProbeWindowPtr;   if (m_iProbeWindowPtr == m_iPWSize)      m_iProbeWindowPtr = 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级在线免费观看| 欧美日韩亚洲另类| 精品少妇一区二区三区视频免付费| 亚洲欧美日韩一区二区三区在线观看| 亚洲精品菠萝久久久久久久| 色综合一个色综合| 夜夜嗨av一区二区三区网页| 欧美日韩国产乱码电影| 亚洲精品一卡二卡| 欧美午夜精品一区| 蜜臀av亚洲一区中文字幕| 欧美成va人片在线观看| 国产激情偷乱视频一区二区三区| 国产欧美综合在线| 欧美性猛交xxxx乱大交退制版| 亚洲大片一区二区三区| 久久夜色精品国产噜噜av| av网站免费线看精品| 日本亚洲最大的色成网站www| 久久色.com| 欧美三区免费完整视频在线观看| 麻豆精品一区二区| 亚洲第一成人在线| 椎名由奈av一区二区三区| 日韩三级视频在线观看| 色综合久久久久综合99| 国产一区二区不卡| 男男gaygay亚洲| 亚洲不卡一区二区三区| 亚洲色图一区二区三区| 久久精品免费在线观看| 91天堂素人约啪| 99久久婷婷国产精品综合| 国产伦精品一区二区三区免费迷 | 国产视频在线观看一区二区三区| 日本精品一级二级| www.亚洲免费av| 福利电影一区二区三区| 一本到高清视频免费精品| 福利一区二区在线| 成人免费视频免费观看| 国产传媒一区在线| 日韩—二三区免费观看av| 亚洲午夜免费电影| 免费人成精品欧美精品 | 国产午夜精品一区二区| 国产欧美日产一区| 亚洲男同性恋视频| 婷婷开心激情综合| 国产成人av影院| 亚洲日本丝袜连裤袜办公室| 欧美日韩一区二区三区四区| 国产欧美日韩三区| 亚洲色图另类专区| 久久亚洲欧美国产精品乐播| 亚洲视频免费看| 99久久免费精品高清特色大片| 精品国产一区二区三区忘忧草| 亚洲激情av在线| 色偷偷88欧美精品久久久| 国产精品国产自产拍在线| 国产精品一区二区三区四区| 欧美不卡在线视频| 91在线观看免费视频| 国产日韩高清在线| 麻豆精品视频在线| 91免费观看国产| 精品少妇一区二区三区日产乱码| 欧美国产日韩亚洲一区| 国产一区美女在线| 日韩限制级电影在线观看| 一二三区精品福利视频| 91电影在线观看| 亚洲综合激情网| 在线亚洲高清视频| 五月开心婷婷久久| 欧美日韩不卡在线| 亚洲风情在线资源站| 欧美亚洲日本国产| 午夜伊人狠狠久久| 欧美美女网站色| 日本sm残虐另类| 精品动漫一区二区三区在线观看| 老司机午夜精品| 中文字幕国产一区二区| 成人夜色视频网站在线观看| 亚洲欧美在线视频| 欧美日韩久久不卡| 国产精品主播直播| 夜夜爽夜夜爽精品视频| 欧美一区二区在线免费播放| 国产九九视频一区二区三区| 亚洲欧洲99久久| 欧美精品亚洲一区二区在线播放| 九九精品一区二区| 洋洋成人永久网站入口| 欧美成人vr18sexvr| 国产一区二区三区四| 亚洲永久精品国产| 亚洲人妖av一区二区| 久久99蜜桃精品| 麻豆精品一区二区| 亚洲成人av中文| 亚洲免费电影在线| 亚洲男人的天堂在线观看| 日本一区二区免费在线| 26uuu国产日韩综合| 日韩精品在线一区二区| 久久久亚洲午夜电影| 久久综合丝袜日本网| 国产亚洲欧美在线| 国产精品久久777777| 亚洲人成网站在线| 亚洲综合色在线| 麻豆中文一区二区| 国产盗摄视频一区二区三区| 豆国产96在线|亚洲| 国产91色综合久久免费分享| av不卡在线观看| 欧美午夜精品久久久久久超碰| 欧美日韩在线免费视频| 欧美第一区第二区| 久久欧美一区二区| 一区二区三区在线视频观看| 亚洲一区二区四区蜜桃| 国产乱国产乱300精品| 日本韩国一区二区三区视频| 精品国产91乱码一区二区三区| 国产欧美日韩精品a在线观看| 亚洲免费在线电影| 国产一区二区不卡| 欧美日韩一区二区在线视频| 中文字幕不卡在线播放| 日本亚洲电影天堂| 在线观看日韩精品| 国产精品久久777777| 激情综合网av| 欧美成人性战久久| 全部av―极品视觉盛宴亚洲| 在线这里只有精品| 亚洲激情五月婷婷| av在线免费不卡| 国产精品私人影院| 国产寡妇亲子伦一区二区| 精品99久久久久久| 国内精品伊人久久久久av一坑| 欧美色成人综合| 麻豆免费看一区二区三区| 欧美一级搡bbbb搡bbbb| 青娱乐精品视频在线| 日韩一区二区在线播放| 日韩av中文字幕一区二区| 91精品国产入口| 国精产品一区一区三区mba视频 | 欧美日韩mp4| 国内不卡的二区三区中文字幕 | 欧美视频你懂的| 国产精品亚洲一区二区三区妖精 | 欧美电影影音先锋| 91在线视频18| 国产成人在线观看免费网站| 亚洲图片欧美综合| 欧美精品一区二区在线观看| av福利精品导航| 黑人巨大精品欧美黑白配亚洲| 国产精品免费免费| 日韩视频永久免费| 欧美午夜片在线看| 91蜜桃免费观看视频| 韩国成人精品a∨在线观看| 一区二区欧美精品| 中文字幕久久午夜不卡| 日韩一区二区精品葵司在线| 成人动漫一区二区三区| 美女精品一区二区| 亚洲高清久久久| 亚洲免费观看高清完整版在线| 中文字幕精品一区二区三区精品| 欧美成人免费网站| 精品国内片67194| 日韩一区二区三区免费看 | 欧美日韩亚洲综合在线| 91亚洲精品久久久蜜桃| 成人av集中营| 成人av午夜影院| 成人视屏免费看| 成人免费毛片高清视频| 成人性生交大片免费看视频在线| 黄页网站大全一区二区| 国产精品一区二区视频| 懂色av一区二区三区免费观看| 国产精品66部| 91啪在线观看| 欧美一区二区视频在线观看2020| 欧美精品v日韩精品v韩国精品v| 日韩一区二区电影网| 国产欧美日韩久久| 亚洲女同ⅹxx女同tv| 丝袜美腿亚洲色图| 国产成人在线观看免费网站|