@@ -997,9 +997,9 @@ SHARING_MAPT2(, innert *)::get_container_node(const key_type &k)
997
997
998
998
std::size_t key = hash ()(k);
999
999
innert *ip = ↦
1000
- SM_ASSERT (ip->is_internal ());
1000
+ SM_ASSERT (ip->is_defined_internal ());
1001
1001
1002
- for (std:: size_t i = 0 ; i < steps; i++ )
1002
+ while ( true )
1003
1003
{
1004
1004
std::size_t bit = key & mask;
1005
1005
@@ -1024,10 +1024,9 @@ SHARING_MAPT2(const, innert *)::get_container_node(const key_type &k) const
1024
1024
1025
1025
std::size_t key = hash ()(k);
1026
1026
const innert *ip = ↦
1027
-
1028
1027
SM_ASSERT (ip->is_defined_internal ());
1029
1028
1030
- for (std:: size_t i = 0 ; i < steps; i++ )
1029
+ while ( true )
1031
1030
{
1032
1031
std::size_t bit = key & mask;
1033
1032
@@ -1058,7 +1057,7 @@ SHARING_MAPT(void)::erase(const key_type &k)
1058
1057
std::size_t key = hash ()(k);
1059
1058
innert *ip = ↦
1060
1059
1061
- for (std:: size_t i = 0 ; i < steps; i++ )
1060
+ while ( true )
1062
1061
{
1063
1062
std::size_t bit = key & mask;
1064
1063
@@ -1072,7 +1071,9 @@ SHARING_MAPT(void)::erase(const key_type &k)
1072
1071
1073
1072
ip = ip->add_child (bit);
1074
1073
1075
- if (ip->is_defined_container ())
1074
+ SM_ASSERT (!ip->empty ());
1075
+
1076
+ if (ip->is_container ())
1076
1077
break ;
1077
1078
1078
1079
key >>= chunk;
@@ -1180,7 +1181,9 @@ ::insert(const key_type &k, valueU &&m)
1180
1181
// The root cannot be a container node
1181
1182
SM_ASSERT (ip->is_internal ());
1182
1183
1183
- for (std::size_t i = 0 ; i < steps; i++)
1184
+ std::size_t i = 0 ;
1185
+
1186
+ while (true )
1184
1187
{
1185
1188
std::size_t bit = key & mask;
1186
1189
@@ -1203,12 +1206,20 @@ ::insert(const key_type &k, valueU &&m)
1203
1206
return ;
1204
1207
}
1205
1208
1206
- if (child->is_container () && i < steps - 1 )
1209
+ if (child->is_container ())
1207
1210
{
1208
- // Migrate the elements downwards
1209
- innert *cp = migrate (i, key, bit, *ip);
1211
+ if (i < steps - 1 )
1212
+ {
1213
+ // Migrate the elements downwards
1214
+ innert *cp = migrate (i, key, bit, *ip);
1210
1215
1211
- cp->place_leaf (k, std::forward<valueU>(m));
1216
+ cp->place_leaf (k, std::forward<valueU>(m));
1217
+ }
1218
+ else
1219
+ {
1220
+ // Add to the bottom container
1221
+ child->place_leaf (k, std::forward<valueU>(m));
1222
+ }
1212
1223
1213
1224
num++;
1214
1225
@@ -1219,14 +1230,8 @@ ::insert(const key_type &k, valueU &&m)
1219
1230
1220
1231
ip = child;
1221
1232
key >>= chunk;
1233
+ i++;
1222
1234
}
1223
-
1224
- SM_ASSERT (ip->is_defined_container ());
1225
-
1226
- // Add to the bottom container
1227
- ip->place_leaf (k, std::forward<valueU>(m));
1228
-
1229
- num++;
1230
1235
}
1231
1236
1232
1237
SHARING_MAPT4 (valueU, void )
0 commit comments