Example usage for com.google.common.collect RangeSet add

List of usage examples for com.google.common.collect RangeSet add

Introduction

In this page you can find the example usage for com.google.common.collect RangeSet add.

Prototype

void add(Range<C> range);

Source Link

Document

Adds the specified range to this RangeSet (optional operation).

Usage

From source file:org.apache.druid.query.filter.BoundDimFilter.java

@Override
public RangeSet<String> getDimensionRangeSet(String dimension) {
    if (!(Objects.equals(getDimension(), dimension) && getExtractionFn() == null
            && ordering.equals(StringComparators.LEXICOGRAPHIC))) {
        return null;
    }/*w ww .  j a v  a  2 s.c  om*/

    RangeSet<String> retSet = TreeRangeSet.create();
    Range<String> range;
    if (getLower() == null) {
        range = isUpperStrict() ? Range.lessThan(getUpper()) : Range.atMost(getUpper());
    } else if (getUpper() == null) {
        range = isLowerStrict() ? Range.greaterThan(getLower()) : Range.atLeast(getLower());
    } else {
        range = Range.range(getLower(), isLowerStrict() ? BoundType.OPEN : BoundType.CLOSED, getUpper(),
                isUpperStrict() ? BoundType.OPEN : BoundType.CLOSED);
    }
    retSet.add(range);
    return retSet;
}

From source file:com.cinchapi.concourse.server.storage.Engine.java

@Override
@Restricted/*from  w w w  .  j ava  2s.co m*/
public void addVersionChangeListener(Token token, VersionChangeListener listener) {
    if (token instanceof RangeToken) {
        Iterable<Range<Value>> ranges = RangeTokens.convertToRange((RangeToken) token);
        for (Range<Value> range : ranges) {
            Map<Text, RangeSet<Value>> map = rangeVersionChangeListeners.getIfPresent(listener);
            if (map == null) {
                map = Maps.newHashMap();
                rangeVersionChangeListeners.put(listener, map);
            }
            RangeSet<Value> set = map.get(((RangeToken) token).getKey());
            if (set == null) {
                set = TreeRangeSet.create();
                map.put(((RangeToken) token).getKey(), set);
            }
            set.add(range);
        }
    } else {
        WeakHashMap<VersionChangeListener, Boolean> existing = versionChangeListeners.get(token);
        if (existing == null) {
            WeakHashMap<VersionChangeListener, Boolean> created = new WeakHashMap<VersionChangeListener, Boolean>();
            existing = versionChangeListeners.putIfAbsent(token, created);
            existing = MoreObjects.firstNonNull(existing, created);
        }
        synchronized (existing) {
            existing.put(listener, Boolean.TRUE);
        }
    }
}

From source file:com.github.rinde.datgen.pdptw.DatasetGenerator.java

Dataset<GeneratedScenario> doGenerate() {

    final ListeningExecutorService service = MoreExecutors
            .listeningDecorator(Executors.newFixedThreadPool(builder.numThreads));
    final Dataset<GeneratedScenario> dataset = Dataset.naturalOrder();

    final List<ScenarioCreator> jobs = new ArrayList<>();

    final RandomGenerator rng = new MersenneTwister(builder.randomSeed);
    final Map<GeneratorSettings, IdSeedGenerator> rngMap = new LinkedHashMap<>();

    for (final Long urgency : builder.urgencyLevels) {
        for (final Double scale : builder.scaleLevels) {
            for (final Entry<TimeSeriesType, Collection<Range<Double>>> dynLevel : builder.dynamismLevels
                    .asMap().entrySet()) {

                final int reps = builder.numInstances * dynLevel.getValue().size();

                final long urg = urgency * 60 * 1000L;
                // The office hours is the period in which new orders are accepted,
                // it is defined as [0,officeHoursLength).
                final long officeHoursLength;
                if (urg < halfDiagTT) {
                    officeHoursLength = builder.scenarioLengthMs - twoDiagTT - PICKUP_DURATION
                            - DELIVERY_DURATION;
                } else {
                    officeHoursLength = builder.scenarioLengthMs - urg - oneAndHalfDiagTT - PICKUP_DURATION
                            - DELIVERY_DURATION;
                }//w w w  . j  av a2 s  .  c  o m

                final int numOrders = DoubleMath.roundToInt(scale * numOrdersPerScale,
                        RoundingMode.UNNECESSARY);

                final ImmutableMap.Builder<String, String> props = ImmutableMap.builder();

                props.put("expected_num_orders", Integer.toString(numOrders));
                props.put("pickup_duration", Long.toString(PICKUP_DURATION));
                props.put("delivery_duration", Long.toString(DELIVERY_DURATION));
                props.put("width_height", String.format("%1.1fx%1.1f", AREA_WIDTH, AREA_WIDTH));

                // TODO store this in TimeSeriesType?
                final RangeSet<Double> rset = TreeRangeSet.create();
                for (final Range<Double> r : dynLevel.getValue()) {
                    rset.add(r);
                }

                // createTimeSeriesGenerator(dynLevel.getKey(), officeHoursLength,
                // numOrders, numOrdersPerScale, props);

                final GeneratorSettings set = GeneratorSettings.builder().setDayLength(builder.scenarioLengthMs)
                        .setOfficeHours(officeHoursLength).setTimeSeriesType(dynLevel.getKey())
                        .setDynamismRangeCenters(builder.dynamismRangeMap.subRangeMap(rset.span()))
                        .setUrgency(urg).setScale(scale).setNumOrders(numOrders).setProperties(props.build())
                        .build();

                final IdSeedGenerator isg = new IdSeedGenerator(rng.nextLong());
                rngMap.put(set, isg);

                for (int i = 0; i < reps; i++) {
                    final LocationGenerator lg = Locations.builder().min(0d).max(AREA_WIDTH).buildUniform();

                    final TimeSeriesGenerator tsg2 = createTimeSeriesGenerator(dynLevel.getKey(),
                            officeHoursLength, numOrders, numOrdersPerScale,
                            ImmutableMap.<String, String>builder());
                    final ScenarioGenerator gen = createGenerator(officeHoursLength, urg, scale, tsg2,
                            set.getDynamismRangeCenters(), lg, builder, numOrdersPerScale);

                    jobs.add(ScenarioCreator.create(isg.next(), set, gen));
                }
            }
        }
    }

    final AtomicLong currentJobs = new AtomicLong(0L);
    final AtomicLong datasetSize = new AtomicLong(0L);

    LOGGER.info(" - Submitting " + jobs.size() + " Jobs");
    for (final ScenarioCreator job : jobs) {
        submitJob(currentJobs, service, job, builder.numInstances, dataset, rngMap, datasetSize);
    }

    final long targetSize = builder.numInstances * builder.dynamismLevels.values().size()
            * builder.scaleLevels.size() * builder.urgencyLevels.size();
    while (datasetSize.get() < targetSize || dataset.size() < targetSize) {
        try {
            // LOGGER.info(" - Waiting, current size ==" + dataset.size());
            Thread.sleep(THREAD_SLEEP_DURATION);
        } catch (final InterruptedException e) {
            throw new IllegalStateException(e);
        }
    }

    LOGGER.info(" - Shutdown Service, Awaiting Termination");
    service.shutdown();
    try {
        service.awaitTermination(1L, TimeUnit.HOURS);
    } catch (final InterruptedException e) {
        throw new IllegalStateException(e);
    }

    LOGGER.info(" - Returning dataset");

    return dataset;
}

From source file:org.eclipse.fx.ui.controls.styledtext.internal.ContentView.java

private void onLineChange(Observable o) {
    RangeSet<Integer> toUpdate = TreeRangeSet.create();
    RangeSet<Integer> toRelease = TreeRangeSet.create();

    double offsetY = offsetYProperty().get();
    com.google.common.collect.Range<Integer> visibleLines = visibleLinesProperty().get();
    ContiguousSet<Integer> set = ContiguousSet.create(visibleLines, DiscreteDomain.integers());
    double lineHeight = lineHeightProperty().get();

    // schedule visible line updates
    if (this.curVisibleLines == null) {
        toUpdate.add(visibleLines);
    } else {//from   w ww.java 2  s  .  co m
        RangeSet<Integer> hiddenLines = TreeRangeSet.create();
        hiddenLines.add(this.curVisibleLines);
        hiddenLines.remove(visibleLines);

        RangeSet<Integer> shownLines = TreeRangeSet.create();
        shownLines.add(visibleLines);
        shownLines.remove(this.curVisibleLines);

        toUpdate.addAll(shownLines);
        toRelease.addAll(hiddenLines);
    }
    this.curVisibleLines = visibleLines;

    // store precomputed y data
    for (int index : set) {
        double y = index * lineHeight - offsetY;
        this.yOffsetData.put(Integer.valueOf(index), Double.valueOf(y));
        //         this.forceLayout = true;
    }

    releaseNodesNow(toRelease);
    updateNodesNow(toUpdate);

    this.lineLayer.requestLayout();
    //      scheduleUpdate();
}

From source file:hudson.model.Fingerprint.java

void addWithoutSaving(@Nonnull String jobFullName, int n) {
    synchronized (usages) { // TODO why not synchronized (this) like some, though not all, other accesses?
        RangeSet r = usages.get(jobFullName);
        if (r == null) {
            r = new RangeSet();
            usages.put(jobFullName, r);/*  w  w w.  j  av a2  s  . co m*/
        }
        r.add(n);
    }
}

From source file:hudson.model.Fingerprint.java

/**
 * Trim off references to non-existent builds and jobs, thereby making the fingerprint smaller.
 *
 * @return true/*w  w  w.  ja v  a2s .  c o m*/
 *      if this record was modified.
 * 
 * @throws IOException Save failure
 */
public synchronized boolean trim() throws IOException {
    boolean modified = false;

    for (Entry<String, RangeSet> e : new Hashtable<String, RangeSet>(usages).entrySet()) {// copy because we mutate
        Job j = Jenkins.getInstance().getItemByFullName(e.getKey(), Job.class);
        if (j == null) {// no such job any more. recycle the record
            modified = true;
            usages.remove(e.getKey());
            continue;
        }

        Run firstBuild = j.getFirstBuild();
        if (firstBuild == null) {// no builds. recycle the whole record
            modified = true;
            usages.remove(e.getKey());
            continue;
        }

        RangeSet cur = e.getValue();

        // builds that are around without the keepLog flag on are normally clustered together (in terms of build #)
        // so our basic strategy is to discard everything up to the first ephemeral build, except those builds
        // that are marked as kept
        RangeSet kept = new RangeSet();
        Run r = firstBuild;
        while (r != null && r.isKeepLog()) {
            kept.add(r.getNumber());
            r = r.getNextBuild();
        }

        if (r == null) {
            // all the build records are permanently kept ones, so we'll just have to keep 'kept' out of whatever currently in 'cur'
            modified |= cur.retainAll(kept);
        } else {
            // otherwise we are ready to discard [0,r.number) except those marked as 'kept'
            RangeSet discarding = new RangeSet(new Range(-1, r.getNumber()));
            discarding.removeAll(kept);
            modified |= cur.removeAll(discarding);
        }

        if (cur.isEmpty()) {
            usages.remove(e.getKey());
            modified = true;
        }
    }

    if (modified) {
        if (logger.isLoggable(Level.FINE)) {
            logger.log(Level.FINE, "Saving trimmed {0}", getFingerprintFile(md5sum));
        }
        save();
    }

    return modified;
}

From source file:hudson.model.AbstractBuild.java

/**
 * Gets the dependency relationship from this build (as the source)
 * and that project (as the sink.)/*w ww.ja  va2  s . c o  m*/
 *
 * @return
 *      range of build numbers that represent which downstream builds are using this build.
 *      The range will be empty if no build of that project matches this (or there is no {@link FingerprintAction}), but it'll never be null.
 */
public RangeSet getDownstreamRelationship(AbstractProject that) {
    RangeSet rs = new RangeSet();

    FingerprintAction f = getAction(FingerprintAction.class);
    if (f == null)
        return rs;

    // look for fingerprints that point to this build as the source, and merge them all
    for (Fingerprint e : f.getFingerprints().values()) {

        if (upstreamCulprits) {
            // With upstreamCulprits, we allow downstream relationships
            // from intermediate jobs
            rs.add(e.getRangeSet(that));
        } else {
            BuildPtr o = e.getOriginal();
            if (o != null && o.is(this))
                rs.add(e.getRangeSet(that));
        }
    }

    return rs;
}

From source file:view.FXApplicationController.java

private void calculatePercentageKComplex() {

    double percentageSum = 0.0;
    RangeSet<Double> rangeset = TreeRangeSet.create();

    for (int i = 0; i < lines.size(); i++) {
        Line line = lines.get(i);

        double lengthOfLine;

        Range r = Range.closed(//www . j  a va 2s. c o  m
                Math.min(line.getLayoutX(), line.getEndX() + line.getLayoutX()) / xAxis.getWidth() * 100.
                        - 1e-9,
                Math.max(line.getLayoutX(), line.getEndX() + line.getLayoutX()) / xAxis.getWidth() * 100.
                        + 1e-9);

        rangeset.add(r);

    }

    percentageSum = rangeset.asRanges().stream().mapToDouble(e -> (e.upperEndpoint() - e.lowerEndpoint()))
            .sum();

    kComplexLabel.setText("K-Complex: " + Math.round(percentageSum) + "%");
}

From source file:com.rockhoppertech.music.fx.cmn.model.MeasureSymbolManager.java

/**
 * Clear out the existing shapes, then calculate and add new ones. Draws a
 * simple representation. Does not pay any attention to the note's start
 * time. That what the MeasureCanvas will do when finished.
 *///from  w  w w . j a v  a  2 s. com
public void refresh() {
    logger.debug("refreshing");

    if (model == null) {
        return;
    }
    shapes.clear();
    symbols.clear();
    //
    // double x = model.getStartX() + 1d
    // * model.getFontSize();

    double x = model.getBeginningBarlineX();

    // this will be at model startx
    // sets first note x
    x = createStaves();
    // x = this.model.getStartX();

    if (this.drawTimeSignature) {
        if (!this.drawKeySignature)
            x += model.getFontSize() / 2d;
        x = addTimeSignature(x, 4, 4);
    }

    // model.setFirstNoteX(x);
    this.createBeatRectangles();

    if (noteList == null) {
        return;
    }

    if (noteList.isEmpty()) {
        return;
    }
    logger.debug("notelist {}", this.noteList);

    // TODO this doesn't cover initial rests i.e. when start beat > 1
    // TODO rests > 5 beats long don't work well
    MIDINote previousNote = noteList.get(0);
    MIDINote firstNote = noteList.get(0);
    double gap = firstNote.getStartBeat() - 1d;
    double eb = 1d;

    double beats = (double) measure.getTimeSignature().getNumerator();
    RangeSet<Double> durSet = TreeRangeSet.create();
    durSet.add(Range.closed(1d, beats));
    logger.debug("initial durSet {} beats {}", durSet, beats);

    for (MIDINote note : noteList) {

        Range<Double> noteRange = Range.closed(note.getStartBeat(), note.getEndBeat());
        durSet.remove(noteRange);
        logger.debug("durSet {} after removing {}", durSet, noteRange);

        logger.debug("beat {} beat in measure {}", note.getStartBeat(), measure.getBeatInMeasure(note));

        // figure out if there is a rest
        double sb = note.getStartBeat();
        if (sb > 1d) {
            eb = previousNote.getEndBeat();
        }
        gap = sb - eb;
        double restbeat = (sb - gap) - this.measure.getStartBeat() + 1d;
        x = getXofBeatN(restbeat);
        logger.debug("sb {} eb {} gap {} x {} restbeat {}", sb, eb, gap, x, restbeat);
        if (gap > 0) {
            int pitch = note.getPitch().getMidiNumber();
            x = addRests(x, gap, pitch);
            x += model.getFontSize() / 2d;
            logger.debug("x {} after adding rest", x);
        } else {
            x += model.getFontSize() / 2d;
        }

        // now worry about the note
        x = getXofBeatN(measure.getBeatInMeasure(note));
        // x = createSymbol(note, x);
        x = createStaffSymbol(note, x);

        logger.debug("x {} after adding symbol", x);
        if (gap >= 0) {
            logger.debug("adding padding");
            // some padding between the symbols
            x += model.getFontSize() / 2d;
            logger.debug("x {} after adding gap 0 spacingl", x);
        }

        gap = 0;
        previousNote = note;
    }

    logger.debug("final durSet {}", durSet);
    if (!durSet.isEmpty()) {
        // then there are rests
        for (Range<Double> restRange : durSet.asRanges()) {
            logger.debug("restRange {}", restRange);
        }
    }

    // push all the x locations to be the previous x + width
    // make sure all the rects are large enough, adjust widths and x
    // locations.
    enlargeBeatRectangles();
    // resize the staves to the new rectangles
    createStaves();
}