public static <T> ItemsSketch<T> getInstance(final Memory srcMem,
                                               final Comparator<? super T> comparator,
                                               final ArrayOfItemsSerDe<T> serDe) {
    final long memCapBytes = srcMem.getCapacity();
    if (memCapBytes < 8) {
      throw new SketchesArgumentException("Memory too small: " + memCapBytes);
    }

    final int preambleLongs = extractPreLongs(srcMem);
    final int serVer = extractSerVer(srcMem);
    final int familyID = extractFamilyID(srcMem);
    final int flags = extractFlags(srcMem);
    final int k = extractK(srcMem);

    ItemsUtil.checkItemsSerVer(serVer);

    if ((serVer == 3) && ((flags & COMPACT_FLAG_MASK) == 0)) {
      throw new SketchesArgumentException("Non-compact Memory images are not supported.");
    }

    final boolean empty = Util.checkPreLongsFlagsCap(preambleLongs, flags, memCapBytes);
    Util.checkFamilyID(familyID);

    final ItemsSketch<T> qs = getInstance(k, comparator); //checks k
    if (empty) { return qs; }

    //Not empty, must have valid preamble + min, max
    final long n = extractN(srcMem);

    //can't check memory capacity here, not enough information
    final int extra = 2; //for min, max
    final int numMemItems = Util.computeRetainedItems(k, n) + extra;

    //set class members
    qs.n_ = n;
    qs.combinedBufferItemCapacity_ = Util.computeCombinedBufferItemCapacity(k, n);
    qs.baseBufferCount_ = computeBaseBufferItems(k, n);
    qs.bitPattern_ = computeBitPattern(k, n);
    qs.combinedBuffer_ = new Object[qs.combinedBufferItemCapacity_];

    final int srcMemItemsOffsetBytes = preambleLongs * Long.BYTES;
    final Memory mReg = srcMem.region(srcMemItemsOffsetBytes,
        srcMem.getCapacity() - srcMemItemsOffsetBytes);
    final T[] itemsArray = serDe.deserializeFromMemory(mReg, numMemItems);
    qs.itemsArrayToCombinedBuffer(itemsArray);
    return qs;
  }
public static < T > ItemsSketch < T > getInstance ( final Memory srcMem , final Comparator < ? super T > comparator , final ArrayOfItemsSerDe < T > serDe ) { final long memCapBytes = srcMem . getCapacity ( ) ; if ( memCapBytes < 8 ) { throw new SketchesArgumentException ( "Memory too small: " + memCapBytes ) ; } final int preambleLongs = extractPreLongs ( srcMem ) ; final int serVer = extractSerVer ( srcMem ) ; final int familyID = extractFamilyID ( srcMem ) ; final int flags = extractFlags ( srcMem ) ; final int k = extractK ( srcMem ) ; ItemsUtil . checkItemsSerVer ( serVer ) ; if ( ( serVer == 3 ) && ( ( flags & COMPACT_FLAG_MASK ) == 0 ) ) { throw new SketchesArgumentException ( "Non-compact Memory images are not supported." ) ; } final boolean empty = Util . checkPreLongsFlagsCap ( preambleLongs , flags , memCapBytes ) ; Util . checkFamilyID ( familyID ) ; final ItemsSketch < T > qs = getInstance ( k , comparator ) ; if ( empty ) { return qs ; } final long n = extractN ( srcMem ) ; final int extra = 2 ; final int numMemItems = Util . computeRetainedItems ( k , n ) + extra ; qs . n_ = n ; qs . combinedBufferItemCapacity_ = Util . computeCombinedBufferItemCapacity ( k , n ) ; qs . baseBufferCount_ = computeBaseBufferItems ( k , n ) ; qs . bitPattern_ = computeBitPattern ( k , n ) ; qs . combinedBuffer_ = new Object [ qs . combinedBufferItemCapacity_ ] ; final int srcMemItemsOffsetBytes = preambleLongs * Long . BYTES ; final Memory mReg = srcMem . region ( srcMemItemsOffsetBytes , srcMem . getCapacity ( ) - srcMemItemsOffsetBytes ) ; final T [ ] itemsArray = serDe . deserializeFromMemory ( mReg , numMemItems ) ; qs . itemsArrayToCombinedBuffer ( itemsArray ) ; return qs ; }
Heapifies the given srcMem, which must be a Memory image of a ItemsSketch
@param <T> type of item
@param srcMem a Memory image of a sketch.
<a href="{@docRoot}/resources/dictionary.html#mem">See Memory</a>
@param comparator to compare items
@param serDe an instance of ArrayOfItemsSerDe
@return a ItemsSketch on the Java heap.