public void update()

in src/main/java/org/apache/datasketches/tuple/arrayofdoubles/ArrayOfDoublesAnotBImpl.java [68:149]


  public void update(final ArrayOfDoublesSketch skA, final ArrayOfDoublesSketch skB) {
    if (skA == null || skB == null) {
      throw new SketchesArgumentException("Neither argument may be null.");
    }
    numValues_ = skA.getNumValues();
    seedHash_ = skA.getSeedHash();
    if (numValues_ != skB.getNumValues()) {
      throw new SketchesArgumentException("Inputs cannot have different numValues");
    }
    if (seedHash_ != skB.getSeedHash()) {
      throw new SketchesArgumentException("Inputs cannot have different seedHashes");
    }

    final long thetaLongA = skA.getThetaLong();
    final int countA = skA.getRetainedEntries();
    final boolean emptyA = skA.isEmpty();

    final long thetaLongB = skB.getThetaLong();
    final int countB = skB.getRetainedEntries();
    final boolean emptyB = skB.isEmpty();

    final int id =
        SetOperationCornerCases.createCornerCaseId(thetaLongA, countA, emptyA, thetaLongB, countB, emptyB);
    final CornerCase cCase = CornerCase.caseIdToCornerCase(id);
    final AnotbAction anotbAction = cCase.getAnotbAction();

    final long minThetaLong = min(thetaLongA, thetaLongB);

    switch (anotbAction) {
      case EMPTY_1_0_T: {
        reset();
        break;
      }
      case DEGEN_MIN_0_F: {
        keys_ = null;
        values_ = null;
        thetaLong_ = minThetaLong;
        empty_ = false;
        count_ = 0;
        break;
      }
      case DEGEN_THA_0_F: {
        keys_ = null;
        values_ = null;
        thetaLong_ = thetaLongA;
        empty_ = false;
        count_ = 0;
        break;
      }
      case TRIM_A: {
        final DataArrays daA = new DataArrays(skA.getKeys(), skA.getValuesAsOneDimension(), countA);
        final DataArrays da = trimDataArrays(daA, minThetaLong, numValues_);
        keys_ = da.hashArr;
        values_ = da.valuesArr;
        thetaLong_ = minThetaLong;
        empty_ = skA.isEmpty();
        count_ = da.count;
        break;
      }
      case SKETCH_A: {
        final ArrayOfDoublesCompactSketch csk = skA.compact();
        keys_ = csk.getKeys();
        values_ = csk.getValuesAsOneDimension();
        thetaLong_ = csk.thetaLong_;
        empty_ = csk.isEmpty();
        count_ = csk.getRetainedEntries();
        break;
      }
      case FULL_ANOTB: { //both A and B should have valid entries.
        final long[] keysA = skA.getKeys();
        final double[] valuesA = skA.getValuesAsOneDimension();
        final DataArrays daR = getResultArrays(minThetaLong, countA, keysA, valuesA, skB);
        count_ = daR.count;
        keys_ = (count_ == 0) ? null : daR.hashArr;
        values_ = (count_ == 0) ? null : daR.valuesArr;
        thetaLong_ = minThetaLong;
        empty_ = (minThetaLong == Long.MAX_VALUE) && (count_ == 0);
        break;
      }
      //default: not possible
    }
  }