code: private static <T extends TemporalProposition> int minStartIteratorBinarySearch(
              List<T> list, long tstamp) {
          int low = 0;
          int high = list.size() - 1;
          ListIterator<T> i = list.listIterator();
  
          while (low <= high) {
              /*
               * We use >>> instead of >> or /2 to avoid overflow. Sun's
               * implementation of binary search actually doesn't do this (bug
               * #5045582).
               */
              int mid = (low + high) >>> 1;
              TemporalProposition midVal = iteratorBinarySearchGet(i, mid);
              Long maxStart = midVal.getInterval().getMinimumStart();
              int cmp = maxStart != null ? maxStart.compareTo(tstamp) : 1;
              if (cmp < 0) {
                  low = mid + 1;
              } else if (cmp > 0) {
                  high = mid - 1;
              } else {
                  return mid;
              }
          }
          return low;
      }
docs: Binary search for a primitive parameter by timestamp, optimized for when
  the parameters are stored in a list that does not implement
  <code>java.util.RandomAccess</code>.
  
  @param list
  a <code>List</code> of <code>PrimitiveParameter</code>
  objects all with the same paramId, cannot be <code>null</code>.
  @param tstamp
  the timestamp we're interested in finding.
  @return a <code>PrimitiveParameter</code>, or <code>null</code> if
  not found.