variable.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include "access.h"
  3. namespace NYT::NGlobal {
  4. ////////////////////////////////////////////////////////////////////////////////
  5. namespace NDetail {
  6. // Defined in impl.cpp.
  7. void RegisterVariable(const TVariableTag& tag, TAccessor accessor);
  8. } // namespace NDetail
  9. ////////////////////////////////////////////////////////////////////////////////
  10. template <CTriviallyErasable<GlobalVariableMaxByteSize> T>
  11. class TVariable
  12. {
  13. public:
  14. TVariable(
  15. const TVariableTag& tag,
  16. TAccessor accessor,
  17. T initValue = {}) noexcept;
  18. TVariable(const TVariable& other) = delete;
  19. TVariable& operator=(const TVariable& other) = delete;
  20. T Get() const noexcept;
  21. void Set(T value) noexcept;
  22. private:
  23. // NB(arkady-e1ppa): Ban TVariable<TVariable<T>>.
  24. static_assert(!requires (T t) {
  25. [] <class U> (TVariable<U>&) { } (t);
  26. });
  27. T Value_;
  28. };
  29. ////////////////////////////////////////////////////////////////////////////////
  30. #define YT_DEFINE_TRACKED_GLOBAL(Type, Name, Tag, InitExpr)
  31. #define YT_DEFINE_TRACKED_THREAD_LOCAL(Type, Name, Tag, ...)
  32. ////////////////////////////////////////////////////////////////////////////////
  33. } // namespace NYT::NGlobal
  34. #define GLOBAL_VARIABLE_INL_H_
  35. #include "variable-inl.h"
  36. #undef GLOBAL_VARIABLE_INL_H_