blueflood-core/src/main/java/com/rackspacecloud/blueflood/types/BaseRollup.java
protected void computeFromRollupsHelper(Points<? extends IBaseRollup> input) throws IOException {
        if (input == null) {
            throw new IOException("Null input to create rollup from");
        }

        if (input.isEmpty()) {
            return;
        }

        // See this and get mind blown:
        // http://stackoverflow.com/questions/18907262/bounded-wildcard-related-compiler-error
        Map<Long, ? extends Points.Point<? extends IBaseRollup>> points = input.getPoints();

        for (Map.Entry<Long, ? extends Points.Point<? extends IBaseRollup>> item : points.entrySet()) {
            IBaseRollup rollup = item.getValue().getData();
            if (!(rollup instanceof BaseRollup)) {
                throw new IOException("Cannot create BaseRollup from type " + rollup.getClass().getName());
            }
            IBaseRollup baseRollup = (IBaseRollup) rollup;
            this.count += baseRollup.getCount();
            average.handleRollupMetric(baseRollup);
            variance.handleRollupMetric(baseRollup);
            minValue.handleRollupMetric(baseRollup);
            maxValue.handleRollupMetric(baseRollup);
        }
    }
protected void computeFromRollupsHelper(Points<? extends IBaseRollup> input) throws IOException {
        if (input == null) {
            throw new IOException("Null input to create rollup from");
        }

        if (input.isEmpty()) {
            return;
        }

        // See this and get mind blown:
        // http://stackoverflow.com/questions/18907262/bounded-wildcard-related-compiler-error
        Map<Long, ? extends Points.Point<? extends IBaseRollup>> points = input.getPoints();

        for (Map.Entry<Long, ? extends Points.Point<? extends IBaseRollup>> item : points.entrySet()) {
            IBaseRollup rollup = item.getValue().getData();
            if (!(rollup instanceof BaseRollup)) {
                throw new IOException("Cannot create BaseRollup from type " + rollup.getClass().getName());
            }
            IBaseRollup baseRollup = (IBaseRollup) rollup;
            this.count += baseRollup.getCount();
            average.handleRollupMetric(baseRollup);
            variance.handleRollupMetric(baseRollup);
            minValue.handleRollupMetric(baseRollup);
            maxValue.handleRollupMetric(baseRollup);
        }
    }
merge rollups into this rollup.