BufferedValue.hpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #ifndef CORE_BUFFERED_VALUE_HPP
  2. #define CORE_BUFFERED_VALUE_HPP
  3. #include "core/math/Math.hpp"
  4. #include "core/utils/Types.hpp"
  5. namespace Core {
  6. template<typename T>
  7. class BufferedValue final {
  8. T last;
  9. T current;
  10. public:
  11. BufferedValue(const T& t) : last(t), current(t) {
  12. }
  13. void update() {
  14. last = current;
  15. }
  16. T get(float lag) const {
  17. return Math::interpolate(last, current, lag);
  18. }
  19. template<typename O>
  20. BufferedValue& operator=(const O& o) {
  21. current = o;
  22. return *this;
  23. }
  24. template<typename O>
  25. BufferedValue& operator+=(const O& o) {
  26. current += o;
  27. return *this;
  28. }
  29. template<typename O>
  30. BufferedValue& operator-=(const O& o) {
  31. current -= o;
  32. return *this;
  33. }
  34. template<typename O>
  35. BufferedValue& operator*=(const O& o) {
  36. current *= o;
  37. return *this;
  38. }
  39. template<typename O>
  40. BufferedValue& operator/=(const O& o) {
  41. current /= o;
  42. return *this;
  43. }
  44. template<typename O>
  45. auto operator+(const O& o) const {
  46. return current + o;
  47. }
  48. template<typename O>
  49. auto operator-(const O& o) const {
  50. return current - o;
  51. }
  52. template<typename O>
  53. auto operator*(const O& o) const {
  54. return current * o;
  55. }
  56. template<typename O>
  57. auto operator/(const O& o) const {
  58. return current / o;
  59. }
  60. auto operator-() const {
  61. return -current;
  62. }
  63. auto& operator[](size_t index) {
  64. return current[index];
  65. }
  66. const auto& operator[](size_t index) const {
  67. return current[index];
  68. }
  69. operator T&() {
  70. return current;
  71. }
  72. operator const T&() const {
  73. return current;
  74. }
  75. };
  76. }
  77. #endif