| 203 | } |
| 204 | |
| 205 | void WriteMap::addUnmodifiedAndUnreadableRange(KeyRangeRef keys) { |
| 206 | auto& it = scratch_iterator; |
| 207 | it.reset(writes, ver); |
| 208 | it.skip(keys.begin); |
| 209 | |
| 210 | bool insert_begin = !it.is_unmodified_range() || it.is_conflict_range() || !it.is_unreadable(); |
| 211 | |
| 212 | if (it.endKey() == keys.end) { |
| 213 | ++it; |
| 214 | } else if (it.endKey() < keys.end) { |
| 215 | it.skip(keys.end); |
| 216 | } |
| 217 | |
| 218 | bool insert_end = (it.is_cleared_range() || it.is_conflict_range() || !it.is_unreadable()) && |
| 219 | (!it.keyAtBegin() || it.beginKey() != keys.end); |
| 220 | bool end_coalesce_unmodified = |
| 221 | it.is_unmodified_range() && it.beginKey() == keys.end && !it.is_conflict_range() && it.is_unreadable(); |
| 222 | bool end_conflict = it.is_conflict_range(); |
| 223 | bool end_cleared = it.is_cleared_range(); |
| 224 | bool end_unreadable = it.is_unreadable(); |
| 225 | |
| 226 | it.tree.clear(); |
| 227 | |
| 228 | PTreeImpl::remove(writes, |
| 229 | ver, |
| 230 | ExtStringRef(keys.begin, !insert_begin ? 1 : 0), |
| 231 | ExtStringRef(keys.end, end_coalesce_unmodified ? 1 : 0)); |
| 232 | |
| 233 | if (insert_begin) |
| 234 | PTreeImpl::insert(writes, ver, WriteMapEntry(keys.begin, OperationStack(), false, false, false, true, true)); |
| 235 | |
| 236 | if (insert_end) |
| 237 | PTreeImpl::insert( |
| 238 | writes, |
| 239 | ver, |
| 240 | WriteMapEntry( |
| 241 | keys.end, OperationStack(), end_cleared, end_conflict, end_conflict, end_unreadable, end_unreadable)); |
| 242 | } |
| 243 | |
| 244 | void WriteMap::addConflictRange(KeyRangeRef keys) { |
| 245 | writeMapEmpty = false; |
no test coverage detected