* Return slices of ids that exist in this idset. * * @param {number} client * @param {number} clock * @param {number} len * @return {Array }
(client, clock, len)
| 213 | * @return {Array<MaybeIdRange>} |
| 214 | */ |
| 215 | slice (client, clock, len) { |
| 216 | const dr = this.clients.get(client) |
| 217 | /** |
| 218 | * @type {Array<MaybeIdRange>} |
| 219 | */ |
| 220 | const res = [] |
| 221 | if (dr) { |
| 222 | /** |
| 223 | * @type {Array<IdRange>} |
| 224 | */ |
| 225 | const ranges = dr.getIds() |
| 226 | let index = findRangeStartInIdRanges(ranges, clock) |
| 227 | if (index !== null) { |
| 228 | let prev = null |
| 229 | while (index < ranges.length) { |
| 230 | let r = ranges[index] |
| 231 | if (r.clock < clock) { |
| 232 | r = new IdRange(clock, r.len - (clock - r.clock)) |
| 233 | } |
| 234 | if (r.clock + r.len > clock + len) { |
| 235 | r = new IdRange(r.clock, clock + len - r.clock) |
| 236 | } |
| 237 | if (r.len <= 0) break |
| 238 | const prevEnd = prev != null ? prev.clock + prev.len : clock |
| 239 | if (prevEnd < r.clock) { |
| 240 | res.push(createMaybeIdRange(prevEnd, r.clock - prevEnd, false)) |
| 241 | } |
| 242 | prev = r |
| 243 | res.push(createMaybeIdRange(r.clock, r.len, true)) |
| 244 | index++ |
| 245 | } |
| 246 | } |
| 247 | } |
| 248 | if (res.length > 0) { |
| 249 | const last = res[res.length - 1] |
| 250 | const end = last.clock + last.len |
| 251 | if (end < clock + len) { |
| 252 | res.push(createMaybeIdRange(end, clock + len - end, false)) |
| 253 | } |
| 254 | } else { |
| 255 | res.push(createMaybeIdRange(clock, len, false)) |
| 256 | } |
| 257 | return res |
| 258 | } |
| 259 | |
| 260 | /** |
| 261 | * @param {number} client |
no test coverage detected