Class PackIndexV2

    • Field Detail

      • NO_INTS

        private static final int[] NO_INTS
      • NO_BYTES

        private static final byte[] NO_BYTES
      • objectCnt

        private long objectCnt
      • fanoutTable

        private final long[] fanoutTable
      • names

        int[][] names
        256 arrays of contiguous object names.
      • offset32

        byte[][] offset32
        256 arrays of the 32 bit offset data, matching names.
      • crc32

        private byte[][] crc32
        256 arrays of the CRC-32 of objects, matching names.
      • offset64

        byte[] offset64
        64 bit offset table.
    • Constructor Detail

      • PackIndexV2

        PackIndexV2​(java.io.InputStream fd)
             throws java.io.IOException
        Throws:
        java.io.IOException
    • Method Detail

      • getObjectCount

        public long getObjectCount()
        Obtain the total number of objects described by this index.
        Specified by:
        getObjectCount in class PackIndex
        Returns:
        number of objects in this index, and likewise in the associated pack that this index was generated from.
      • getOffset64Count

        public long getOffset64Count()
        Obtain the total number of objects needing 64 bit offsets.
        Specified by:
        getOffset64Count in class PackIndex
        Returns:
        number of objects in this index using a 64 bit offset; that is an object positioned after the 2 GB position within the file.
      • findLevelOne

        private int findLevelOne​(long nthPosition)
      • getLevelTwo

        private int getLevelTwo​(long nthPosition,
                                int levelOne)
      • getObjectId

        public ObjectId getObjectId​(long nthPosition)
        Get ObjectId for the n-th object entry returned by PackIndex.iterator().

        This method is a constant-time replacement for the following loop:

         Iterator<MutableEntry> eItr = index.iterator();
         int curPosition = 0;
         while (eItr.hasNext() && curPosition++ < nthPosition)
                eItr.next();
         ObjectId result = eItr.next().toObjectId();
         
        Specified by:
        getObjectId in class PackIndex
        Parameters:
        nthPosition - position within the traversal of PackIndex.iterator() that the caller needs the object for. The first returned PackIndex.MutableEntry is 0, the second is 1, etc.
        Returns:
        the ObjectId for the corresponding entry.
      • getOffset

        public long getOffset​(long nthPosition)
        Get offset in a pack for the n-th object entry returned by PackIndex.iterator().
        Specified by:
        getOffset in class PackIndex
        Parameters:
        nthPosition - unsigned 32 bit position within the traversal of PackIndex.iterator() for which the caller needs the offset. The first returned PackIndex.MutableEntry is 0, the second is 1, etc. Positions past 2**31-1 are negative, but still valid.
        Returns:
        the offset in a pack for the corresponding entry.
      • findOffset

        public long findOffset​(AnyObjectId objId)
        Locate the file offset position for the requested object.
        Specified by:
        findOffset in class PackIndex
        Parameters:
        objId - name of the object to locate within the pack.
        Returns:
        offset of the object's header and compressed content; -1 if the object does not exist in this index and is thus not stored in the associated pack.
      • getOffset

        private long getOffset​(int levelOne,
                               int levelTwo)
      • findCRC32

        public long findCRC32​(AnyObjectId objId)
                       throws MissingObjectException
        Retrieve stored CRC32 checksum of the requested object raw-data (including header).
        Specified by:
        findCRC32 in class PackIndex
        Parameters:
        objId - id of object to look for
        Returns:
        CRC32 checksum of specified object (at 32 less significant bits)
        Throws:
        MissingObjectException - when requested ObjectId was not found in this index
      • hasCRC32Support

        public boolean hasCRC32Support()
        Check whether this index supports (has) CRC32 checksums for objects.
        Specified by:
        hasCRC32Support in class PackIndex
        Returns:
        true if CRC32 is stored, false otherwise
      • iterator

        public java.util.Iterator<PackIndex.MutableEntry> iterator()

        Provide iterator that gives access to index entries. Note, that iterator returns reference to mutable object, the same reference in each call - for performance reason. If client needs immutable objects, it must copy returned object on its own.

        Iterator returns objects in SHA-1 lexicographical order.

        Specified by:
        iterator in interface java.lang.Iterable<PackIndex.MutableEntry>
        Specified by:
        iterator in class PackIndex
      • resolve

        public void resolve​(java.util.Set<ObjectId> matches,
                            AbbreviatedObjectId id,
                            int matchLimit)
                     throws java.io.IOException
        Find objects matching the prefix abbreviation.
        Specified by:
        resolve in class PackIndex
        Parameters:
        matches - set to add any located ObjectIds to. This is an output parameter.
        id - prefix to search for.
        matchLimit - maximum number of results to return. At most this many ObjectIds should be added to matches before returning.
        Throws:
        java.io.IOException - the index cannot be read.
      • idOffset

        private static int idOffset​(int p)
      • binarySearchLevelTwo

        private int binarySearchLevelTwo​(AnyObjectId objId,
                                         int levelOne)