void finish(BddtHistoryItem hi) {
   GraphBlock gb = in_blocks.get(hi.getThread());
   if (gb != null) {
     gb.finish(hi.getTime());
     in_blocks.remove(hi.getThread());
   }
 }
 void startBlock(BddtHistoryItem hi) {
   if (start_time == 0) start_time = hi.getTime();
   else start_time = Math.min(start_time, hi.getTime());
   GraphBlock gb = new GraphBlock(hi);
   all_blocks.add(gb);
   in_blocks.put(hi.getThread(), gb);
 }
 BumpThread getThread() {
   return for_item.getThread();
 }
 BumpThread getThread() {
   if (for_items.isEmpty()) return null;
   BddtHistoryItem bi = for_items.get(0);
   return bi.getThread();
 }
 void extendBlock(BddtHistoryItem hi) {
   GraphBlock gb = in_blocks.get(hi.getThread());
   if (gb == null) startBlock(hi);
   else gb.addItem(hi);
 }