@@ -130,6 +130,9 @@ class StateVar : public State<S>
130130 friend bool operator !=(const StateVar<S>& a, StateVar<S>& b)
131131 { return !(a == b); }
132132
133+ S* operator ->()
134+ { return &this ->Value (); }
135+
133136protected:
134137 StateVar (std::shared_ptr<REACT_IMPL ::StateNode<S>>&& nodePtr) :
135138 StateVar::State ( std::move(nodePtr) )
@@ -291,103 +294,6 @@ auto CreateRef(const State<S>& state) -> State<Ref<S>>
291294 return CreateWrappedNode<State<Ref<S>>, StateRefNode<S>>(state.GetGroup (), state);
292295}
293296
294- // /////////////////////////////////////////////////////////////////////////////////////////////////
295- // / ObjectContext
296- // /////////////////////////////////////////////////////////////////////////////////////////////////
297- template <typename S>
298- class ObjectContext
299- {
300- public:
301- ObjectContext () = default ;
302-
303- ObjectContext (const ObjectContext&) = default ;
304- ObjectContext& operator =(const ObjectContext&) = default ;
305-
306- ObjectContext (ObjectContext&&) = default ;
307- ObjectContext& operator =(ObjectContext&&) = default ;
308-
309- S& GetObject ()
310- { return *objectPtr_; }
311-
312- const S& GetObject () const
313- { return *objectPtr_; }
314-
315- template <typename U>
316- const U& Get (const State<U>& member) const
317- { return GetInternals (member).Value (); }
318-
319- template <typename U>
320- const EventValueList<U>& Get (const Event<U>& member) const
321- { return GetInternals (member).Events (); }
322-
323- private:
324- template <typename ... Us>
325- explicit ObjectContext (S* objectPtr) :
326- objectPtr_( objectPtr )
327- { }
328-
329- S* objectPtr_;
330-
331- template <typename U>
332- friend class impl ::StateNode;
333- };
334-
335- // /////////////////////////////////////////////////////////////////////////////////////////////////
336- // / ObjectState
337- // /////////////////////////////////////////////////////////////////////////////////////////////////
338- template <typename S>
339- class ObjectState : public State <ObjectContext<S>>
340- {
341- public:
342- // Construct with group
343- template <typename ... Us>
344- static ObjectState Create (const Group& group, S&& obj, const Us& ... members)
345- {
346- using REACT_IMPL ::NodeId;
347-
348- std::initializer_list<NodeId> memberIds = { GetInternals (members).GetNodeId () ... };
349-
350- return CreateObjectStateNode (group, std::move (obj), memberIds);
351- }
352-
353- template <typename ... Us>
354- static ObjectState Create (InPlaceTag, const Group& group, Us&& ... args)
355- { return CreateObjectStateNode (in_place, group, std::forward<Us>(args) ...); }
356-
357- ObjectState () = default ;
358-
359- ObjectState (const ObjectState&) = default ;
360- ObjectState& operator =(const ObjectState&) = default ;
361-
362- ObjectState (ObjectState&&) = default ;
363- ObjectState& operator =(ObjectState&&) = default ;
364-
365- S* operator ->()
366- { return &this ->Value ().GetObject (); }
367-
368- protected:
369- ObjectState (std::shared_ptr<REACT_IMPL ::StateNode<ObjectContext<S>>>&& nodePtr) :
370- ObjectState::State ( std::move(nodePtr) )
371- { }
372-
373- private:
374- static auto CreateObjectStateNode (const Group& group, S&& obj, const std::initializer_list<REACT_IMPL ::NodeId>& memberIds) -> decltype(auto )
375- {
376- using REACT_IMPL ::ObjectStateNode;
377-
378- return std::make_shared<ObjectStateNode<S>>(group, std::move (obj), memberIds);
379- }
380-
381- template <typename ... Us>
382- static auto CreateObjectStateNode (InPlaceTag, const Group& group, Us&& ... args) -> decltype(auto )
383- {
384- using REACT_IMPL ::ObjectStateNode;
385- using REACT_IMPL ::SameGroupOrLink;
386-
387- return std::make_shared<ObjectStateNode<S>>(in_place, group, std::forward<Us>(args) ...);
388- }
389- };
390-
391297/* *****************************************/ REACT_END /* *****************************************/
392298
393299#endif // REACT_STATE_H_INCLUDED
0 commit comments