4#ifndef _Stroika_Foundation_Execution_ModuleGetterSetter_h_
5#define _Stroika_Foundation_Execution_ModuleGetterSetter_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
11#include "Stroika/Foundation/Common/Common.h"
12#include "Stroika/Foundation/Memory/Common.h"
31 template <
typename IMPL,
typename T>
33 { impl.Get () } -> same_as<T>;
34 { impl.Set (declval<T> ()) } -> same_as<void>;
111 template <
typename T, IModuleGetterSetterImpl<T> IMPL>
130 nonvirtual T
Get ()
const;
136 nonvirtual
void Set (
const T& v);
147 nonvirtual shared_ptr<const T>
operator->()
const;
175 nonvirtual optional<T>
Update (
const function<optional<T> (
const T&)>& updaterFunction);
184 static void DoInitOutOfLine_ (
typename RWSynchronized<optional<IMPL>>::WritableReference* ref);
194#include "ModuleGetterSetter.inl"
Wrap any object with Synchronized<> and it can be used similarly to the base type,...
Helper to define synchronized, lazy constructed, module initialization (intended to work with DataExc...
nonvirtual void AssureLoaded() const
nonvirtual shared_ptr< const T > operator->() const
nonvirtual optional< T > Update(const function< optional< T >(const T &)> &updaterFunction)
Call this with a lambda that will update the associated value (INSIDE a lock (synchronized))
nonvirtual void Set(const T &v)