static String toString()

in src/main/java/org/apache/datasketches/kll/KllPreambleUtil.java [192:324]


  static String toString(final Memory mem, final SketchType sketchType, final boolean includeData) {
    final KllMemoryValidate memVal = new KllMemoryValidate(mem, sketchType);
    final int flags = memVal.flags & 0XFF;
    final String flagsStr = (flags) + ", 0x" + (Integer.toHexString(flags)) + ", "
        + zeroPad(Integer.toBinaryString(flags), 8);
    final int preInts = memVal.preInts;
    final boolean serialVersionUpdatable = getMemorySerVer(mem) == SERIAL_VERSION_UPDATABLE;
    final boolean empty = memVal.empty;
    final boolean singleItem = memVal.singleItem;
    final int sketchBytes = memVal.sketchBytes;
    final int typeBytes = sketchType == DOUBLES_SKETCH ? Double.BYTES : Float.BYTES;
    final int familyID = getMemoryFamilyID(mem);
    final String famName = idToFamily(familyID).toString();

    final StringBuilder sb = new StringBuilder();
    sb.append(Util.LS).append("### KLL SKETCH MEMORY SUMMARY:").append(LS);
    sb.append("Byte   0   : Preamble Ints       : ").append(preInts).append(LS);
    sb.append("Byte   1   : SerVer              : ").append(memVal.serVer).append(LS);
    sb.append("Byte   2   : FamilyID            : ").append(memVal.familyID).append(LS);
    sb.append("             FamilyName          : ").append(famName).append(LS);
    sb.append("Byte   3   : Flags Field         : ").append(flagsStr).append(LS);
    sb.append("         Bit Flag Name").append(LS);
    sb.append("           0 EMPTY COMPACT       : ").append(empty).append(LS);
    sb.append("           1 LEVEL_ZERO_SORTED   : ").append(memVal.level0Sorted).append(LS);
    sb.append("           2 SINGLE_ITEM COMPACT : ").append(singleItem).append(LS);
    sb.append("           3 DOUBLES_SKETCH      : ").append(sketchType == DOUBLES_SKETCH).append(LS);
    sb.append("           4 UPDATABLE           : ").append(serialVersionUpdatable).append(LS);
    sb.append("Bytes  4-5 : K                   : ").append(memVal.k).append(LS);
    sb.append("Byte   6   : Min Level Cap, M    : ").append(memVal.m).append(LS);
    sb.append("Byte   7   : (Reserved)          : ").append(LS);

    final long n = memVal.n;
    final int minK = memVal.minK;
    final int numLevels = memVal.numLevels;
    if (serialVersionUpdatable || (!empty && !singleItem)) {
        sb.append("Bytes  8-15: N                   : ").append(n).append(LS);
        sb.append("Bytes 16-17: MinK                : ").append(minK).append(LS);
        sb.append("Byte  18   : NumLevels           : ").append(numLevels).append(LS);
    }
    else {
        sb.append("Assumed    : N                   : ").append(n).append(LS);
        sb.append("Assumed    : MinK                : ").append(minK).append(LS);
        sb.append("Assumed    : NumLevels           : ").append(numLevels).append(LS);
    }
    sb.append("PreambleBytes                    : ").append(preInts * 4).append(LS);
    sb.append("Sketch Bytes                     : ").append(sketchBytes).append(LS);
    sb.append("Memory Capacity Bytes            : ").append(mem.getCapacity()).append(LS);
    sb.append("### END KLL Sketch Memory Summary").append(LS);

    if (includeData) {
      sb.append(LS);
      sb.append("### START KLL DATA:").append(LS);
      int offsetBytes = 0;

      if (serialVersionUpdatable) {
        sb.append("LEVELS ARR:").append(LS);
        offsetBytes = DATA_START_ADR;
        for (int i = 0; i < numLevels + 1; i++) {
          sb.append(i + ", " + mem.getInt(offsetBytes)).append(LS);
          offsetBytes += Integer.BYTES;
        }
        sb.append("MIN/MAX:").append(LS);
        if (sketchType == DOUBLES_SKETCH) {
          sb.append(mem.getDouble(offsetBytes)).append(LS);
          offsetBytes += typeBytes;
          sb.append(mem.getDouble(offsetBytes)).append(LS);
          offsetBytes += typeBytes;
        } else { //floats
          sb.append(mem.getFloat(offsetBytes)).append(LS);
          offsetBytes += typeBytes;
          sb.append(mem.getFloat(offsetBytes)).append(LS);
          offsetBytes += typeBytes;
        }
        sb.append("ITEMS DATA").append(LS);
        final int itemsSpace = (sketchBytes - offsetBytes) / typeBytes;
        if (sketchType == DOUBLES_SKETCH) {
          for (int i = 0; i < itemsSpace; i++) {
            sb.append(i + ", " + mem.getDouble(offsetBytes)).append(LS);
            offsetBytes += typeBytes;
          }
        } else { //floats
          for (int i = 0; i < itemsSpace; i++) {
            sb.append(mem.getFloat(offsetBytes)).append(LS);
            offsetBytes += typeBytes;
          }
        }

      } else if (!empty && !singleItem) { //compact full
        sb.append("LEVELS ARR:").append(LS);
        offsetBytes = DATA_START_ADR;
        for (int i = 0; i < numLevels; i++) {
          sb.append(i + ", " + mem.getInt(offsetBytes)).append(LS);
          offsetBytes += Integer.BYTES;
        }
        sb.append("(top level of Levels arr is absent)").append(LS);
        sb.append("MIN/MAX:").append(LS);
        if (sketchType == DOUBLES_SKETCH) {
          sb.append(mem.getDouble(offsetBytes)).append(LS);
          offsetBytes += typeBytes;
          sb.append(mem.getDouble(offsetBytes)).append(LS);
          offsetBytes += typeBytes;
        } else { //floats
          sb.append(mem.getFloat(offsetBytes)).append(LS);
          offsetBytes += typeBytes;
          sb.append(mem.getFloat(offsetBytes)).append(LS);
          offsetBytes += typeBytes;
        }
        sb.append("ITEMS DATA").append(LS);
        final int itemSpace = (sketchBytes - offsetBytes) / typeBytes;
        if (sketchType == DOUBLES_SKETCH) {
          for (int i = 0; i < itemSpace; i++) {
            sb.append(i + ", " + mem.getDouble(offsetBytes)).append(LS);
            offsetBytes += typeBytes;
          }
        } else { //floats
          for (int i = 0; i < itemSpace; i++) {
            sb.append(i + ", " + mem.getFloat(offsetBytes)).append(LS);
            offsetBytes += typeBytes;
          }
        }

      } else { //single item
        if (singleItem) {
          sb.append("SINGLE ITEM DATA").append(LS);
          sb.append(sketchType == DOUBLES_SKETCH
              ? mem.getDouble(DATA_START_ADR_SINGLE_ITEM)
              : mem.getFloat(DATA_START_ADR_SINGLE_ITEM)).append(LS);
        }
      }
      sb.append("### END KLL DATA:").append(LS);
    }
    return sb.toString();
  }