OGLplus  (0.59.0) a C++ wrapper for rendering APIs

value_tracker.hpp
Go to the documentation of this file.
1 
9 #ifndef EAGINE_VALUE_TRACKER_HPP
10 #define EAGINE_VALUE_TRACKER_HPP
11 
12 #include <type_traits>
13 
14 namespace eagine {
15 //------------------------------------------------------------------------------
18 template <typename T, typename Transform>
19 class value_change_tracker : Transform {
20  static_assert(std::is_arithmetic_v<T>);
21 
22 public:
24  value_change_tracker() noexcept = default;
25 
27  value_change_tracker(T initial) noexcept
28  : _prev{std::move(initial)} {}
29 
31  value_change_tracker(T initial, Transform transf) noexcept
32  : Transform(std::move(transf))
33  , _prev{std::move(initial)} {}
34 
36  auto transform(const T& value) noexcept {
37  return _transform()(value);
38  }
39 
41  auto get() const noexcept -> const T& {
42  return _prev;
43  }
44 
46  auto has_changed(const T& next) noexcept -> bool {
47  if(transform(_prev) != transform(next)) {
48  _prev = next;
49  return true;
50  }
51  return false;
52  }
53 
54 private:
55  auto _transform() noexcept -> Transform& {
56  return *this;
57  }
58 
59  T _prev{0};
60 };
61 //------------------------------------------------------------------------------
65 template <typename T, T D>
67  auto operator()(const T& value) noexcept -> T {
68  return T(value / D);
69  }
70 };
71 //------------------------------------------------------------------------------
74 template <typename T, T D>
77 //------------------------------------------------------------------------------
78 } // namespace eagine
79 
80 #endif // EAGINE_VALUE_TRACKER_HPP
Common code is placed in this namespace.
Definition: eagine.hpp:21
Transform class for value_change_tracker, dividing by the specified amount.
Definition: value_tracker.hpp:66
auto has_changed(const T &next) noexcept -> bool
If the transformed current and values are different, stores next.
Definition: value_tracker.hpp:46
value_change_tracker(T initial, Transform transf) noexcept
Constructor setting the initial value and the transform.
Definition: value_tracker.hpp:31
auto get() const noexcept -> const T &
Returns the currently stored value.
Definition: value_tracker.hpp:41
value_change_tracker(T initial) noexcept
Constructor setting the initial value.
Definition: value_tracker.hpp:27
Class tracking the changes in a potentially transformed value.
Definition: value_tracker.hpp:19
value_change_tracker() noexcept=default
Default constructor.
auto transform(const T &value) noexcept
Transforms the specified value.
Definition: value_tracker.hpp:36

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).