4
4
#include < nui/concepts.hpp>
5
5
#include < nui/frontend/event_system/range_event_context.hpp>
6
6
#include < nui/frontend/event_system/event_context.hpp>
7
+ #include < nui/utility/assert.hpp>
7
8
#include < nui/utility/meta/pick_first.hpp>
8
9
9
10
#include < memory>
@@ -26,7 +27,7 @@ namespace Nui
26
27
class ObservedBase
27
28
{
28
29
public:
29
- explicit ObservedBase (EventContext* ctx)
30
+ explicit ObservedBase (CustomEventContextFlag_t, EventContext* ctx)
30
31
: eventContext_{ctx}
31
32
, attachedEvents_{}
32
33
, attachedOneshotEvents_{}
@@ -49,7 +50,6 @@ namespace Nui
49
50
ObservedBase& operator =(ObservedBase&& other)
50
51
{
51
52
eventContext_ = other.eventContext_ ;
52
- other.eventContext_ = nullptr ;
53
53
for (auto & event : other.attachedEvents_ )
54
54
attachedEvents_.push_back (std::move (event));
55
55
for (auto & event : other.attachedOneshotEvents_ )
@@ -96,7 +96,7 @@ namespace Nui
96
96
97
97
virtual void update (bool /* force*/ = false ) const
98
98
{
99
- assert (eventContext_ != nullptr );
99
+ NUI_ASSERT (eventContext_ != nullptr , " Event context must never be null. " );
100
100
101
101
for (auto & event : attachedEvents_)
102
102
{
@@ -114,7 +114,7 @@ namespace Nui
114
114
115
115
void updateNow (bool force = false ) const
116
116
{
117
- assert (eventContext_ != nullptr );
117
+ NUI_ASSERT (eventContext_ != nullptr , " Event context must never be null. " );
118
118
119
119
update (force);
120
120
eventContext_->executeActiveEventsImmediately ();
@@ -182,7 +182,7 @@ namespace Nui
182
182
183
183
public:
184
184
ModifiableObserved ()
185
- : ObservedBase{&globalEventContext}
185
+ : ObservedBase{CustomEventContextFlag, &globalEventContext}
186
186
, contained_{}
187
187
{}
188
188
ModifiableObserved (const ModifiableObserved&) = delete ;
@@ -219,15 +219,21 @@ namespace Nui
219
219
220
220
template <typename T = ContainedT>
221
221
explicit ModifiableObserved (T&& t)
222
- : ObservedBase{&globalEventContext}
222
+ : ObservedBase{CustomEventContextFlag, &globalEventContext}
223
223
, contained_{std::forward<T>(t)}
224
224
{}
225
225
226
- explicit ModifiableObserved (EventContext* ctx)
227
- : ObservedBase{ctx}
226
+ explicit ModifiableObserved (CustomEventContextFlag_t, EventContext* ctx)
227
+ : ObservedBase{CustomEventContextFlag, ctx}
228
228
, contained_{}
229
229
{}
230
230
231
+ template <typename T = ContainedT>
232
+ explicit ModifiableObserved (CustomEventContextFlag_t, EventContext* ctx, T&& t)
233
+ : ObservedBase{CustomEventContextFlag, ctx}
234
+ , contained_{std::forward<T>(t)}
235
+ {}
236
+
231
237
/* *
232
238
* @brief Assign a completely new value.
233
239
*
@@ -584,8 +590,8 @@ namespace Nui
584
590
using ModifiableObserved<ContainerT>::update;
585
591
586
592
public:
587
- explicit ObservedContainer (EventContext* ctx)
588
- : ModifiableObserved<ContainerT>{ctx}
593
+ explicit ObservedContainer (CustomEventContextFlag_t, EventContext* ctx)
594
+ : ModifiableObserved<ContainerT>{CustomEventContextFlag, ctx}
589
595
, rangeContext_{0 }
590
596
, afterEffectId_{registerAfterEffect ()}
591
597
{}
@@ -595,6 +601,12 @@ namespace Nui
595
601
, afterEffectId_{registerAfterEffect ()}
596
602
{}
597
603
template <typename T = ContainerT>
604
+ explicit ObservedContainer (CustomEventContextFlag_t, EventContext* ctx, T&& t)
605
+ : ModifiableObserved<ContainerT>{CustomEventContextFlag, ctx, std::forward<T>(t)}
606
+ , rangeContext_{static_cast <long >(contained_.size ())}
607
+ , afterEffectId_{registerAfterEffect ()}
608
+ {}
609
+ template <typename T = ContainerT>
598
610
explicit ObservedContainer (T&& t)
599
611
: ModifiableObserved<ContainerT>{std::forward<T>(t)}
600
612
, rangeContext_{static_cast <long >(contained_.size ())}
@@ -605,12 +617,23 @@ namespace Nui
605
617
, rangeContext_{std::move (rangeContext)}
606
618
, afterEffectId_{registerAfterEffect ()}
607
619
{}
620
+ explicit ObservedContainer (CustomEventContextFlag_t, EventContext* ctx, RangeEventContext&& rangeContext)
621
+ : ModifiableObserved<ContainerT>{CustomEventContextFlag, ctx}
622
+ , rangeContext_{std::move (rangeContext)}
623
+ , afterEffectId_{registerAfterEffect ()}
624
+ {}
608
625
template <typename T = ContainerT>
609
626
ObservedContainer (T&& t, RangeEventContext&& rangeContext)
610
627
: ModifiableObserved<ContainerT>{std::forward<T>(t)}
611
628
, rangeContext_{std::move (rangeContext)}
612
629
, afterEffectId_{registerAfterEffect ()}
613
630
{}
631
+ template <typename T = ContainerT>
632
+ ObservedContainer (CustomEventContextFlag_t, EventContext* ctx, T&& t, RangeEventContext&& rangeContext)
633
+ : ModifiableObserved<ContainerT>{CustomEventContextFlag, ctx, std::forward<T>(t)}
634
+ , rangeContext_{std::move (rangeContext)}
635
+ , afterEffectId_{registerAfterEffect ()}
636
+ {}
614
637
615
638
ObservedContainer (const ObservedContainer&) = delete ;
616
639
ObservedContainer (ObservedContainer&&) = default ;
@@ -785,7 +808,7 @@ namespace Nui
785
808
decltype (std::declval<U>().insert(std::declval<const value_type&>()))>
786
809
insert (const value_type& value)
787
810
{
788
- assert (ObservedBase::eventContext_ != nullptr );
811
+ NUI_ASSERT (ObservedBase::eventContext_ != nullptr , " Event context must never be null. " );
789
812
790
813
const auto result = contained_.insert (value);
791
814
rangeContext_.performFullRangeUpdate ();
@@ -799,7 +822,7 @@ namespace Nui
799
822
decltype (std::declval<U>().insert(std::declval<value_type&&>()))>
800
823
insert (value_type&& value)
801
824
{
802
- assert (ObservedBase::eventContext_ != nullptr );
825
+ NUI_ASSERT (ObservedBase::eventContext_ != nullptr , " Event context must never be null. " );
803
826
804
827
const auto result = contained_.insert (std::move (value));
805
828
rangeContext_.performFullRangeUpdate ();
@@ -1014,7 +1037,7 @@ namespace Nui
1014
1037
{
1015
1038
std::function<void (int )> doInsert;
1016
1039
doInsert = [&](int retries) {
1017
- assert (ObservedBase::eventContext_ != nullptr );
1040
+ NUI_ASSERT (ObservedBase::eventContext_ != nullptr , " Event context must never be null. " );
1018
1041
1019
1042
const auto result = rangeContext_.insertModificationRange (contained_.size (), low, high, type);
1020
1043
if (result == RangeEventContext::InsertResult::Final)
@@ -1043,7 +1066,7 @@ namespace Nui
1043
1066
1044
1067
auto registerAfterEffect ()
1045
1068
{
1046
- assert (ObservedBase::eventContext_ != nullptr );
1069
+ NUI_ASSERT (ObservedBase::eventContext_ != nullptr , " Event context must never be null. " );
1047
1070
return ObservedBase::eventContext_->registerAfterEffect (Event{[this ](EventContext::EventIdType) {
1048
1071
rangeContext_.reset (static_cast <long >(contained_.size ()), true );
1049
1072
return true ;
0 commit comments