public static Iterable<Range> getRangesToRollup(Granularity g, final long startMillis,
                                                    final long stopMillis) throws GranularityException {
        final long snappedStartMillis = g.coarser().snapMillis(startMillis);
        final long snappedStopMillis = g.coarser().snapMillis(stopMillis + g.coarser().milliseconds());

        return new IntervalRangeIterator(g, snappedStartMillis, snappedStopMillis);
    }
public static Iterable < Range > getRangesToRollup ( Granularity g , final long startMillis , final long stopMillis ) throws GranularityException { final long snappedStartMillis = g . coarser ( ) . snapMillis ( startMillis ) ; final long snappedStopMillis = g . coarser ( ) . snapMillis ( stopMillis + g . coarser ( ) . milliseconds ( ) ) ; return new IntervalRangeIterator ( g , snappedStartMillis , snappedStopMillis ) ; }
given a start and stop time, return an iterator over ranges in *this* granularity that should be rolled up into
single points in the next coarser granularity.

Here is an example:  Given start/end (s,e), we need to return all the ranges in Y that correspond to rollup
periods A,B,C.  This involves returning ranges prior to (s) and after (e) that map to parts of (A) and (C) in
the coarser rollup.

X [       A      |       B      |       C      |       D      ]
Y [    |    | s  |    |    |    |  e |    |    |    |    |    ]\

@param startMillis
@param stopMillis
@return