private void gatherStatistics()

in hollow/src/main/java/com/netflix/hollow/core/write/HollowListTypeWriteState.java [70:117]


    private void gatherStatistics(boolean numShardsChanged) {

        int maxElementOrdinal = 0;
        ByteData data = ordinalMap.getByteData().getUnderlyingArray();

        totalOfListSizes = new long[numShards];
        if (numShardsChanged) {
            revTotalOfListSizes = new long[revNumShards];
        }

        for(int i=0;i<=maxOrdinal;i++) {
            if(currentCyclePopulated.get(i) || previousCyclePopulated.get(i)) {
                long pointer = ordinalMap.getPointerForData(i);
                int size = VarInt.readVInt(data, pointer);

                pointer += VarInt.sizeOfVInt(size);

                for(int j=0;j<size;j++) {
                    int elementOrdinal = VarInt.readVInt(data, pointer);
                    if(elementOrdinal > maxElementOrdinal)
                        maxElementOrdinal = elementOrdinal;
                    pointer += VarInt.sizeOfVInt(elementOrdinal);
                }

                totalOfListSizes[i & (numShards-1)] += size;
                if (numShardsChanged) {
                    revTotalOfListSizes[i & (revNumShards-1)] += size;
                }
            }
        }
        
        long maxShardTotalOfListSizes = 0;
        for(int i=0;i<numShards;i++) {
            if(totalOfListSizes[i] > maxShardTotalOfListSizes)
                maxShardTotalOfListSizes = totalOfListSizes[i];
        }
        bitsPerElement = maxElementOrdinal == 0 ? 1 : 64 - Long.numberOfLeadingZeros(maxElementOrdinal);
        bitsPerListPointer = maxShardTotalOfListSizes == 0 ? 1 : 64 - Long.numberOfLeadingZeros(maxShardTotalOfListSizes);

        if (numShardsChanged) {
            long revMaxShardTotalOfListSizes = 0;
            for(int i=0;i<revNumShards;i++) {
                if(revTotalOfListSizes[i] > revMaxShardTotalOfListSizes)
                    revMaxShardTotalOfListSizes = revTotalOfListSizes[i];
            }
            revBitsPerListPointer = revMaxShardTotalOfListSizes == 0 ? 1 : 64 - Long.numberOfLeadingZeros(revMaxShardTotalOfListSizes);
        }
    }