131 std::is_move_assignable_v<T>))
206 template <typename Callable>
208 ensure_initialized(const Callable &creator) const
247 template <typename Callable>
249 value_or_initialize(const Callable &creator) const
256 memory_consumption() const;
269 mutable
std::atomic<
bool> object_is_initialized;
283 std::is_move_assignable_v<T>))
286 : object_is_initialized(false)
293 std::is_move_assignable_v<T>))
300 object_is_initialized.store(
true);
301 task_result.emplace_object(other.
value());
304 object_is_initialized.store(
false);
311 std::is_move_assignable_v<T>))
325 std::is_move_assignable_v<T>))
332 object_is_initialized.store(
true);
333 task_result.emplace_object(other.
value());
337 object_is_initialized.store(
false);
348 std::is_move_assignable_v<T>))
364 std::is_move_assignable_v<T>))
367 object_is_initialized.store(
false);
374 std::is_move_assignable_v<T>))
375template <
typename Callable>
398 if (!object_is_initialized.load(std::memory_order_acquire))
399# ifdef DEAL_II_HAVE_CXX20
427 if (!object_is_initialized.load(std::memory_order_relaxed))
428 task_result.try_emplace_task(creator);
445 object_is_initialized.store(
true, std::memory_order_release);
449 ExcMessage(
"The current object does not contain a valid object "
450 "even though we have just initialized it."));
456 std::is_move_assignable_v<T>))
465 return (object_is_initialized && (task_result.empty() ==
false));
471 std::is_move_assignable_v<T>))
477 "value() has been called but the contained object has not been "
478 "initialized. Did you forget to call 'ensure_initialized()' first?"));
480 return task_result.value();
486 std::is_move_assignable_v<T>))
487template <
typename Callable>
489 const Callable &creator)
const
492 ensure_initialized(creator);
493 return task_result.value();
499 std::is_move_assignable_v<T>))
503 sizeof(*this) -
sizeof(task_result);
const T & value_or_initialize(const Callable &creator) const
void ensure_initialized(const Callable &creator) const
std::atomic< bool > object_is_initialized
std::size_t memory_consumption() const
Lazy & operator=(Lazy &&other) noexcept
Threads::TaskResult< T > task_result
Lazy(Lazy &&other) noexcept
Lazy & operator=(const Lazy &other)
#define DEAL_II_ALWAYS_INLINE
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_CXX20_REQUIRES(condition)
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
static ::ExceptionBase & ExcMessage(std::string arg1)
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)