iterateStructs = (transaction, structs, clockStart, len, f) => {
  if (len === 0) {
    return;
  }

  const clockEnd = clockStart + len;
  let index = findIndexCleanStart(transaction, structs, clockStart);
  let struct;

  do {
    struct = structs[index++];

    if (clockEnd < struct.id.clock + struct.length) {
      findIndexCleanStart(transaction, structs, clockEnd);
    }

    f(struct);
  } while (index < structs.length && structs[index].id.clock < clockEnd);
}
Iterate over a range of structs

@param {Transaction} transaction
@param {Array<Item|GC>} structs
@param {number} clockStart Inclusive start
@param {number} len
@param {function(GC|Item):void} f

@function