BVB Source Codes

CRYENGINE Show ValueHistory.h Source code

Return Download CRYENGINE: download ValueHistory.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /********************************************************************
  4.    -------------------------------------------------------------------------
  5.    File name:   ValueHistory.h
  6.    $Id$
  7.    Description:
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 2008                               : Created by Mikko Mononen
  12.  
  13.  *********************************************************************/
  14.  
  15. #ifndef _VALUEHISTORY_H_
  16. #define _VALUEHISTORY_H_
  17.  
  18. #if _MSC_VER > 1000
  19.         #pragma once
  20. #endif
  21.  
  22. // Simple class to track a history of float values. Assumes positive values.
  23. template<typename T>
  24. class CValueHistory
  25. {
  26. public:
  27.         CValueHistory(unsigned s, float sampleIterval) : sampleIterval(sampleIterval), head(0), size(0), t(0), v(0) { data.resize(s); }
  28.  
  29.         inline void Reset()
  30.         {
  31.                 size = 0;
  32.                 head = 0;
  33.                 v = 0;
  34.                 t = 0;
  35.         }
  36.  
  37.         inline void Sample(T nv)
  38.         {
  39.                 data[head] = nv;
  40.                 head = (head + 1) % data.size();
  41.                 if (size < data.size()) size++;
  42.         }
  43.  
  44.         inline void Sample(T nv, float dt)
  45.         {
  46.                 t += dt;
  47.                 v = max(v, nv);
  48.  
  49.                 int iter = 0;
  50.                 while (t > sampleIterval && iter < 5)
  51.                 {
  52.                         data[head] = v;
  53.                         head = (head + 1) % data.size();
  54.                         if (size < data.size()) size++;
  55.                         ++iter;
  56.                         t -= sampleIterval;
  57.                 }
  58.                 if (iter == 5)
  59.                         t = 0;
  60.                 v = 0;
  61.         }
  62.  
  63.         inline unsigned GetSampleCount() const
  64.         {
  65.                 return size;
  66.         }
  67.  
  68.         inline unsigned GetMaxSampleCount() const
  69.         {
  70.                 return data.size();
  71.         }
  72.  
  73.         inline T GetSampleInterval() const
  74.         {
  75.                 return sampleIterval;
  76.         }
  77.  
  78.         inline T GetSample(unsigned i) const
  79.         {
  80.                 const unsigned n = data.size();
  81.                 return data[(head + (n - 1 - i)) % n];
  82.         }
  83.  
  84.         inline T GetMaxSampleValue() const
  85.         {
  86.                 T maxVal = 0;
  87.                 const unsigned n = data.size();
  88.                 for (unsigned i = 0; i < size; ++i)
  89.                         maxVal = max(maxVal, data[(head + (n - 1 - i)) % n]);
  90.                 return maxVal;
  91.         };
  92.  
  93. private:
  94.         std::vector<T> data;
  95.         unsigned       head, size;
  96.         T              v;
  97.         float          t;
  98.         const float    sampleIterval;
  99. };
  100.  
  101. #endif
  102.  
downloadValueHistory.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top