AtomicMinMax.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #pragma once
  2. #include "ThirdPartyHeadersBegin.h"
  3. #include <limits>
  4. #include <boost/atomic.hpp>
  5. #include "ThirdPartyHeadersEnd.h"
  6. #include "CodeContract.h"
  7. #include "MinMax.h"
  8. namespace tecplot
  9. {
  10. namespace ___3933
  11. {
  12. template <typename T>
  13. struct ___225
  14. {
  15. boost::atomic<T> m_min;
  16. boost::atomic<T> m_max;
  17. ___225(void) { invalidate(); }
  18. ___225(double newMin, double newMax)
  19. {
  20. m_min = static_cast<T>(newMin);
  21. m_max = static_cast<T>(newMax);
  22. }
  23. ___225(double ___4298)
  24. {
  25. m_min = static_cast<T>(___4298);
  26. m_max = static_cast<T>(___4298);
  27. }
  28. ___225(___225<T> const &___2888) : m_min(___2888.m_min.load()), m_max(___2888.m_max.load()) {}
  29. inline double minValue(void) const { return m_min; };
  30. inline double maxValue(void) const { return m_max; };
  31. inline void ___3499(double newMin, double newMax)
  32. {
  33. REQUIRE(newMin <= newMax);
  34. m_min = static_cast<T>(newMin);
  35. m_max = static_cast<T>(newMax);
  36. };
  37. inline void ___3499(___225<T> const &___2888)
  38. {
  39. m_min = ___2888.m_min.load();
  40. m_max = ___2888.m_max.load();
  41. };
  42. inline void include(double ___4298)
  43. {
  44. T const tVal = static_cast<T>(___4298);
  45. T curMin = m_min;
  46. while (tVal < curMin && !m_min.compare_exchange_weak(curMin, tVal))
  47. ;
  48. T curMax = m_max;
  49. while (tVal > curMax && !m_max.compare_exchange_weak(curMax, tVal))
  50. ;
  51. }
  52. inline void include(___225<T> const &minMax)
  53. {
  54. T testMin = minMax.m_min;
  55. T curMin = m_min;
  56. while (testMin < curMin && !m_min.compare_exchange_weak(curMin, testMin))
  57. ;
  58. T testMax = minMax.m_max;
  59. T curMax = m_max;
  60. while (testMax > curMax && !m_max.compare_exchange_weak(curMax, testMax))
  61. ;
  62. }
  63. inline void include(___2479 const &minMax)
  64. {
  65. T testMin = static_cast<T>(minMax.minValue());
  66. T curMin = m_min;
  67. while (testMin < curMin && !m_min.compare_exchange_weak(curMin, testMin))
  68. ;
  69. T testMax = static_cast<T>(minMax.maxValue());
  70. T curMax = m_max;
  71. while (testMax > curMax && !m_max.compare_exchange_weak(curMax, testMax))
  72. ;
  73. }
  74. inline bool containsValue(double ___4298) const { return (m_min <= ___4298 && ___4298 <= m_max); }
  75. inline void invalidate(void)
  76. {
  77. m_min = std::numeric_limits<T>::max();
  78. m_max = -std::numeric_limits<T>::max();
  79. }
  80. inline bool ___2067(void) const { return m_min.load() <= m_max.load(); }
  81. ___225<T> &operator=(___225<T> const &___3392)
  82. {
  83. m_min = ___3392.m_min.load();
  84. m_max = ___3392.m_max.load();
  85. return *this;
  86. }
  87. };
  88. }
  89. }