40 #include <unordered_set> 41 #include <unordered_map> 53 template <lifetime_state RequiredState,
typename Owner>
55 iCookie{ invalid_cookie<cookie_type> }, iSubject { &aSubject }, iOwner{ aOwner }, iState{ aSubject.object_state() }, iDebug{
false }
57 iCookie = subject().add_flag(*
this);
60 template <lifetime_state RequiredState,
typename Owner>
62 iCookie{ invalid_cookie<cookie_type> }, iSubject{ aOther.iSubject }, iOwner{ aOther.iOwner }, iState { aOther.iSubject->object_state() }, iDebug{
false }
64 iCookie = subject().add_flag(*
this);
67 template <lifetime_state RequiredState,
typename Owner>
71 subject().remove_flag(*
this);
74 template <lifetime_state RequiredState,
typename Owner>
80 template <lifetime_state RequiredState,
typename Owner>
83 return iState == lifetime_state::Creating;
86 template <lifetime_state RequiredState,
typename Owner>
89 return iState == lifetime_state::Alive;
92 template <lifetime_state RequiredState,
typename Owner>
95 return iState == lifetime_state::Destroying;
98 template <lifetime_state RequiredState,
typename Owner>
101 return iState == lifetime_state::Destroyed;
104 template <lifetime_state RequiredState,
typename Owner>
107 return iState == RequiredState;
110 template <lifetime_state RequiredState,
typename Owner>
113 if (iState == lifetime_state::Alive)
116 std::cerr <<
"lifetime_flag::set_alive()" << std::endl;
117 iState = lifetime_state::Alive;
120 template <lifetime_state RequiredState,
typename Owner>
123 if (iState == lifetime_state::Destroying)
126 std::cerr <<
"lifetime_flag::set_destroying()" << std::endl;
127 iState = lifetime_state::Destroying;
130 template <lifetime_state RequiredState,
typename Owner>
133 if (iState == lifetime_state::Destroyed)
136 std::cerr <<
"lifetime_flag::set_destroyed()" << std::endl;
137 iState = lifetime_state::Destroyed;
140 template <lifetime_state RequiredState,
typename Owner>
146 template <lifetime_state RequiredState,
typename Owner>
152 template <lifetime_state RequiredState,
typename Owner>
158 template <
typename FlagList>
163 template <
typename FlagList>
166 std::scoped_lock<mutex_type> lk(iFlagList.mutex());
174 template <
typename FlagList>
180 template <
typename FlagList>
186 template <
typename FlagList>
192 template <
typename FlagList>
198 template <
typename FlagList>
204 template <
typename FlagList>
207 std::scoped_lock<mutex_type> lk(iFlagList.mutex());
211 for (
auto i = flags().begin(); i != flags().end();)
215 template <
typename FlagList>
218 std::scoped_lock<mutex_type> lk(iFlagList.mutex());
224 for (
auto i = flags().begin(); i != flags().end();)
225 (*i++)->set_destroying();
229 template <
typename FlagList>
232 std::scoped_lock<mutex_type> lk(iFlagList.mutex());
238 for (
auto i = flags().begin(); i != flags().end();)
239 (*i++)->set_destroyed();
243 template <
typename FlagList>
246 std::scoped_lock<mutex_type> lk(flags().mutex());
265 template <
typename FlagList>
268 std::scoped_lock<mutex_type> lk(flags().mutex());
269 flags().remove(aFlag.
cookie());
272 template <
typename FlagList>
cookie_type add_flag(i_lifetime_flag &aFlag) const final
bool is_creating() const final
virtual void set_destroyed()=0
bool is_destroyed() const final
lifetime_state object_state() const final
virtual void set_destroying()=0
void set_destroying() override
bool is_destroying() const final
virtual ~basic_lifetime()
bool is_alive() const final
bool is_alive(Object &aObject)
void remove_flag(const i_lifetime_flag &aFlag) const final
void set_alive() override
void set_destroyed() override
i_lifetime_flag::cookie_type cookie_type
lifetime_flag(const i_lifetime &aSubject, owner_pointer aOwner=nullptr)
virtual cookie_type cookie() const =0
i_lifetime_flag::cookie_type cookie_type