@@ -168,10 +168,22 @@ namespace Nui
168
168
}
169
169
return *this ;
170
170
};
171
+ ModifiableObserved& operator =(ContainedT const & contained)
172
+ {
173
+ contained_ = contained;
174
+ update ();
175
+ return *this ;
176
+ }
177
+ ModifiableObserved& operator =(ContainedT&& contained)
178
+ {
179
+ contained_ = std::move (contained);
180
+ update ();
181
+ return *this ;
182
+ }
171
183
~ModifiableObserved () = default ;
172
184
173
185
template <typename T = ContainedT>
174
- ModifiableObserved (T&& t)
186
+ explicit ModifiableObserved (T&& t)
175
187
: contained_{std::forward<T>(t)}
176
188
{}
177
189
@@ -316,9 +328,14 @@ namespace Nui
316
328
{
317
329
return ref_;
318
330
}
319
- void operator =(T&& ref)
331
+ void operator =(T&& val)
332
+ {
333
+ ref_ = std::move (val);
334
+ owner_->insertRangeChecked (pos_, pos_, RangeStateType::Modify);
335
+ }
336
+ void operator =(T const & val)
320
337
{
321
- ref_ = std::forward<T>(ref) ;
338
+ ref_ = val ;
322
339
owner_->insertRangeChecked (pos_, pos_, RangeStateType::Modify);
323
340
}
324
341
@@ -527,12 +544,12 @@ namespace Nui
527
544
, afterEffectId_{registerAfterEffect ()}
528
545
{}
529
546
template <typename T = ContainerT>
530
- ObservedContainer (T&& t)
547
+ explicit ObservedContainer (T&& t)
531
548
: ModifiableObserved<ContainerT>{std::forward<T>(t)}
532
549
, rangeContext_{static_cast <long >(contained_.size ())}
533
550
, afterEffectId_{registerAfterEffect ()}
534
551
{}
535
- ObservedContainer (RangeEventContext&& rangeContext)
552
+ explicit ObservedContainer (RangeEventContext&& rangeContext)
536
553
: ModifiableObserved<ContainerT>{}
537
554
, rangeContext_{std::move (rangeContext)}
538
555
, afterEffectId_{registerAfterEffect ()}
@@ -987,6 +1004,17 @@ namespace Nui
987
1004
using ModifiableObserved<T>::ModifiableObserved;
988
1005
using ModifiableObserved<T>::operator =;
989
1006
using ModifiableObserved<T>::operator ->;
1007
+
1008
+ Observed& operator =(T const & contained)
1009
+ {
1010
+ ModifiableObserved<T>::operator =(contained);
1011
+ return *this ;
1012
+ }
1013
+ Observed& operator =(T&& contained)
1014
+ {
1015
+ ModifiableObserved<T>::operator =(std::move (contained));
1016
+ return *this ;
1017
+ }
990
1018
};
991
1019
template <typename ... Parameters>
992
1020
class Observed <std::vector<Parameters...>> : public ObservedContainer<std::vector<Parameters...>>
@@ -996,6 +1024,17 @@ namespace Nui
996
1024
using ObservedContainer<std::vector<Parameters...>>::operator =;
997
1025
using ObservedContainer<std::vector<Parameters...>>::operator ->;
998
1026
static constexpr auto isRandomAccess = true ;
1027
+
1028
+ Observed<std::vector<Parameters...>>& operator =(std::vector<Parameters...> const & contained)
1029
+ {
1030
+ ObservedContainer<std::vector<Parameters...>>::operator =(contained);
1031
+ return *this ;
1032
+ }
1033
+ Observed<std::vector<Parameters...>>& operator =(std::vector<Parameters...>&& contained)
1034
+ {
1035
+ ObservedContainer<std::vector<Parameters...>>::operator =(std::move (contained));
1036
+ return *this ;
1037
+ }
999
1038
};
1000
1039
template <typename ... Parameters>
1001
1040
class Observed <std::deque<Parameters...>> : public ObservedContainer<std::deque<Parameters...>>
@@ -1005,6 +1044,17 @@ namespace Nui
1005
1044
using ObservedContainer<std::deque<Parameters...>>::operator =;
1006
1045
using ObservedContainer<std::deque<Parameters...>>::operator ->;
1007
1046
static constexpr auto isRandomAccess = true ;
1047
+
1048
+ Observed<std::deque<Parameters...>>& operator =(std::deque<Parameters...> const & contained)
1049
+ {
1050
+ ObservedContainer<std::deque<Parameters...>>::operator =(contained);
1051
+ return *this ;
1052
+ }
1053
+ Observed<std::deque<Parameters...>>& operator =(std::deque<Parameters...>&& contained)
1054
+ {
1055
+ ObservedContainer<std::deque<Parameters...>>::operator =(std::move (contained));
1056
+ return *this ;
1057
+ }
1008
1058
};
1009
1059
template <typename ... Parameters>
1010
1060
class Observed <std::basic_string<Parameters...>> : public ObservedContainer<std::basic_string<Parameters...>>
@@ -1015,6 +1065,17 @@ namespace Nui
1015
1065
using ObservedContainer<std::basic_string<Parameters...>>::operator ->;
1016
1066
static constexpr auto isRandomAccess = true ;
1017
1067
1068
+ Observed<std::basic_string<Parameters...>>& operator =(std::basic_string<Parameters...> const & contained)
1069
+ {
1070
+ ObservedContainer<std::basic_string<Parameters...>>::operator =(contained);
1071
+ return *this ;
1072
+ }
1073
+ Observed<std::basic_string<Parameters...>>& operator =(std::basic_string<Parameters...>&& contained)
1074
+ {
1075
+ ObservedContainer<std::basic_string<Parameters...>>::operator =(std::move (contained));
1076
+ return *this ;
1077
+ }
1078
+
1018
1079
Observed<std::basic_string<Parameters...>>& erase (std::size_t index = 0 , std::size_t count = std::string::npos)
1019
1080
{
1020
1081
const auto sizeBefore = this ->contained_ .size ();
@@ -1027,18 +1088,32 @@ namespace Nui
1027
1088
class Observed <std::set<Parameters...>> : public ObservedContainer<std::set<Parameters...>>
1028
1089
{
1029
1090
public:
1091
+ using ObservedContainer<std::set<Parameters...>>::ObservedContainer;
1092
+ using ObservedContainer<std::set<Parameters...>>::operator =;
1093
+ using ObservedContainer<std::set<Parameters...>>::operator ->;
1030
1094
static constexpr auto isRandomAccess = false ;
1031
1095
1032
1096
public:
1033
1097
Observed ()
1034
1098
: ObservedContainer<std::set<Parameters...>>{RangeEventContext{0 , true }}
1035
1099
{}
1036
1100
template <typename T = std::set<Parameters...>>
1037
- Observed (T&& t)
1101
+ explicit Observed (T&& t)
1038
1102
: ObservedContainer<std::set<Parameters...>>{
1039
1103
std::forward<T>(t),
1040
1104
RangeEventContext{static_cast <long >(t.size ()), true }}
1041
1105
{}
1106
+
1107
+ Observed<std::set<Parameters...>>& operator =(std::set<Parameters...> const & contained)
1108
+ {
1109
+ ObservedContainer<std::set<Parameters...>>::operator =(contained);
1110
+ return *this ;
1111
+ }
1112
+ Observed<std::set<Parameters...>>& operator =(std::set<Parameters...>&& contained)
1113
+ {
1114
+ ObservedContainer<std::set<Parameters...>>::operator =(std::move (contained));
1115
+ return *this ;
1116
+ }
1042
1117
};
1043
1118
1044
1119
template <typename ContainerT>
@@ -1118,7 +1193,7 @@ namespace Nui
1118
1193
struct CopiableObservedWrap // minimal wrapper to make Observed<T> copiable
1119
1194
{
1120
1195
public:
1121
- constexpr CopiableObservedWrap (Observed<T> const & observed)
1196
+ explicit constexpr CopiableObservedWrap (Observed<T> const & observed)
1122
1197
: observed_{&observed}
1123
1198
{}
1124
1199
0 commit comments