void CUnreadWaveCollection::InsertChangesOnly(CWaveCollection * lpLastReported, CWaveCollection * lpCurrent)
{
	const TWaveMap & vCurrent = lpCurrent->GetWaves();
	const TWaveMap & vLastReported = lpLastReported->GetWaves();

	for (TWaveMapConstIter iter = vCurrent.begin(); iter != vCurrent.end(); iter++)
	{
		TWaveMapConstIter pos = vLastReported.find(iter->first);

		CWave * lpReportedWave = pos == vLastReported.end() ? NULL : pos->second;

		WAVE_CHANGED_STATUS nStatus = GetChangedStatus(lpReportedWave, iter->second);

		if (nStatus == WCS_REFRESH)
		{
			lpLastReported->AddWave(new CWave(*iter->second));
		}
		else if (nStatus == WCS_CHANGED)
		{
			CUnreadWave * lpUnread = GetDifference(lpReportedWave, iter->second);

			if (lpUnread != NULL)
			{
				Insert(lpUnread);
			}
		}
	}
}
Esempio n. 2
0
// Get the elapsed time, if bReset is true reset the start time
void CProfileTimer::GetElapsedTime(ElapsedTime &cElapsed, bool bReset)
{
    ::gettimeofday(&sEnd, NULL);

    GetDifference(cElapsed, &sStart, &sEnd);

    if (bReset)
        sStart = sEnd;
}
Esempio n. 3
0
// used to create a relative time from the systemtime when only systemtime is stored in Sysinternals DbgView files.
// the reverse (creating system-time from relative times) makes no sense.
void DBLogReader::GetRelativeTime(Line& line)
{
	if (line.time != 0.0)		// if relative time is already filled in do nothing
		return;

	if (m_linenumber == 1)
	{
		m_firstFiletime = line.systemTime;
		return;
	}

	line.time = GetDifference(m_firstFiletime, line.systemTime);
}
Esempio n. 4
0
// Get the elapsed time from start until now
void CProfileTimer::GetElapsedNow(ElapsedTime &cElapsed, const char *pLabel1)
{
    // Set as an error flag
    cElapsed.lSec = -1;
    if (!pLabel1)
        return;

    struct timeval t1 = GetLabelTimestamp(pLabel1);
    if (t1.tv_sec == -1)
        return;
    struct timeval t2;
    ::gettimeofday(&t2, NULL);

    GetDifference(cElapsed, &t1, &t2);
}
Esempio n. 5
0
/*! Calculates the angle which is defined as relative position dRel
    between start angle dAlpha and end angle dBeta. If dRel=0, the retured
    angle is dAlpha and if dRel=1, the returned version is dBeta. The bCCW controls
    the arc between start and end.
 
    \retval Relative angle between dAlpha and dBeta taking account the direction.
 */
Angle Angle::GetRelative(
   qreal dRel,            //!< Relative value from [0,1] interval.
   const Angle& dAlpha,    //!< First angle
   const Angle& dBeta,     //!< Second angle
   bool bCCW               //!< true -> counterclockwise, false -> clockwise.
) 
{
   ASSERT(dRel >= 0 && dRel <= 1.0);
   Angle aDelta = GetDifference(dAlpha,dBeta,bCCW);
   if(bCCW)
      aDelta = dAlpha + dRel*aDelta;
   else
      aDelta = dAlpha - dRel*aDelta;
   return aDelta;
}
void CUnreadWaveCollection::InsertAllWaves(CWaveCollection * lpCurrent)
{
	const TWaveMap & vCurrent = lpCurrent->GetWaves();

	for (TWaveMapConstIter iter = vCurrent.begin(); iter != vCurrent.end(); iter++)
	{
		if (GetChangedStatus(NULL, iter->second) == WCS_CHANGED)
		{
			CUnreadWave * lpUnread = GetDifference(NULL, iter->second);

			if (lpUnread != NULL)
			{
				Insert(lpUnread);
			}
		}
	}
}
Esempio n. 7
0
void CProfileTimer::GetElapsed(ElapsedTime &cElapsed, const char *pLabel1, const char *pLabel2, bool bMarkLabel2)
{   // Set as an error flag
    cElapsed.lSec = -1;
    if (!pLabel1 || !pLabel2)
        return;

    if (bMarkLabel2)
        SetTimestamp(pLabel2);

    struct timeval t1 = GetLabelTimestamp(pLabel1);
    if (t1.tv_sec == -1)
        return;
    struct timeval t2 = GetLabelTimestamp(pLabel2);
    if (t2.tv_sec == -1)
        return;

    GetDifference(cElapsed, &t1, &t2);
}
/////////////////////////////////////////////////////////////////////////////
// MM Algorithm
/////////////////////////////////////////////////////////////////////////////
void CBradleyTerry::MinorizationMaximization(int fThetaW,
                                             int fThetaD,
                                             double Epsilon) {
  //
  // Set initial values
  //
  ThetaW = fThetaW ? 1.0 : std::pow(10.0, eloAdvantage/400.0);
  ThetaD = fThetaD ? 1.0 : std::pow(10.0, eloDraw/400.0);
  for (int i = crs.GetPlayers(); --i >= 0;)
    pGamma[i] = 1.0;

  //
  // Main MM loop
  //
  for (int i = 0; i < 10000; i++) {
    UpdateGammas();
    double Diff = GetDifference(crs.GetPlayers(), pGamma, pNextGamma);

    if (fThetaW) {
      double NewThetaW = UpdateThetaW();
      double ThetaW_Diff = std::fabs(ThetaW - NewThetaW);
      if (ThetaW_Diff > Diff)
        Diff = ThetaW_Diff;
      ThetaW = NewThetaW;
    }

    if (fThetaD) {
      double NewThetaD = UpdateThetaD();
      double ThetaD_Diff = std::fabs(ThetaD - NewThetaD);
      if (ThetaD_Diff > Diff)
        Diff = ThetaD_Diff;
      ThetaD = NewThetaD;
    }

    if (Diff < Epsilon)
      break;

    //
    // Print iteration information
    //
#if 1
    if ((i + 1) % 100 == 0) {
      std::cout << "Iteration " << i + 1 << ": ";
      std::cout << Diff << ' ';
      std::cout << '\n';
      std::cout.flush();
    }
#endif
  }

  //
  // Convert back to Elos
  //
  {
    double Total = 0;
    for (int i = crs.GetPlayers(); --i >= 0;)
      Total += (velo[i] = std::log10(pGamma[i]) * 400);
    double Offset = - Total / crs.GetPlayers();
    for (int i = crs.GetPlayers(); --i >= 0;)
      velo[i] += Offset;
  }

  if (fThetaW)
    eloAdvantage = std::log10(ThetaW) * 400;

  if (fThetaD)
    eloDraw = std::log10(ThetaD) * 400;
}
Esempio n. 9
0
// ////////////////////////////////////////////////////////////////////////////
TimeVal TimeVal::GetDifferenceAbs(const TimeVal &time_1, const TimeVal &time_2)
{
	return((time_1 >= time_2) ? GetDifference(time_1, time_2) :
		GetDifference(time_2, time_1));
}