public final class com.carrotsearch.hppc.sorting.IndirectSort
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.carrotsearch.hppc.sorting.IndirectSort
  super_class: java.lang.Object
{
  static int MIN_LENGTH_FOR_INSERTION_SORT;
    descriptor: I
    flags: (0x0008) ACC_STATIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 20
            bipush 30
            putstatic com.carrotsearch.hppc.sorting.IndirectSort.MIN_LENGTH_FOR_INSERTION_SORT:I
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.carrotsearch.hppc.sorting.IndirectSort this
         0: .line 25
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 27
            return
        end local 0 // com.carrotsearch.hppc.sorting.IndirectSort this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/carrotsearch/hppc/sorting/IndirectSort;

  public static int[] mergesort(int, int, com.carrotsearch.hppc.sorting.IndirectComparator);
    descriptor: (IILcom/carrotsearch/hppc/sorting/IndirectComparator;)[I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // int start
        start local 1 // int length
        start local 2 // com.carrotsearch.hppc.sorting.IndirectComparator comparator
         0: .line 37
            iload 0 /* start */
            iload 1 /* length */
            invokestatic com.carrotsearch.hppc.sorting.IndirectSort.createOrderArray:(II)[I
            astore 3 /* src */
        start local 3 // int[] src
         1: .line 39
            iload 1 /* length */
            iconst_1
            if_icmple 5
         2: .line 40
            aload 3 /* src */
            invokevirtual int[].clone:()Ljava/lang/Object;
            checkcast int[]
            astore 4 /* dst */
        start local 4 // int[] dst
         3: .line 41
            aload 3 /* src */
            aload 4 /* dst */
            iconst_0
            iload 1 /* length */
            aload 2 /* comparator */
            invokestatic com.carrotsearch.hppc.sorting.IndirectSort.topDownMergeSort:([I[IIILcom/carrotsearch/hppc/sorting/IndirectComparator;)V
         4: .line 42
            aload 4 /* dst */
            areturn
        end local 4 // int[] dst
         5: .line 45
      StackMap locals: int[]
      StackMap stack:
            aload 3 /* src */
            areturn
        end local 3 // int[] src
        end local 2 // com.carrotsearch.hppc.sorting.IndirectComparator comparator
        end local 1 // int length
        end local 0 // int start
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    6     0       start  I
            0    6     1      length  I
            0    6     2  comparator  Lcom/carrotsearch/hppc/sorting/IndirectComparator;
            1    6     3         src  [I
            3    5     4         dst  [I
    MethodParameters:
            Name  Flags
      start       
      length      
      comparator  

  public static <T> int[] mergesort(T[], int, int, java.util.Comparator<? super T>);
    descriptor: ([Ljava/lang/Object;IILjava/util/Comparator;)[I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // java.lang.Object[] input
        start local 1 // int start
        start local 2 // int length
        start local 3 // java.util.Comparator comparator
         0: .line 59
            iload 1 /* start */
            iload 2 /* length */
            new com.carrotsearch.hppc.sorting.IndirectComparator$DelegatingComparator
            dup
            aload 0 /* input */
            aload 3 /* comparator */
            invokespecial com.carrotsearch.hppc.sorting.IndirectComparator$DelegatingComparator.<init>:([Ljava/lang/Object;Ljava/util/Comparator;)V
            invokestatic com.carrotsearch.hppc.sorting.IndirectSort.mergesort:(IILcom/carrotsearch/hppc/sorting/IndirectComparator;)[I
            areturn
        end local 3 // java.util.Comparator comparator
        end local 2 // int length
        end local 1 // int start
        end local 0 // java.lang.Object[] input
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0       input  [Ljava/lang/Object;
            0    1     1       start  I
            0    1     2      length  I
            0    1     3  comparator  Ljava/util/Comparator<-TT;>;
    Signature: <T:Ljava/lang/Object;>([TT;IILjava/util/Comparator<-TT;>;)[I
    MethodParameters:
            Name  Flags
      input       
      start       
      length      
      comparator  

  private static void topDownMergeSort(int[], int[], int, int, com.carrotsearch.hppc.sorting.IndirectComparator);
    descriptor: ([I[IIILcom/carrotsearch/hppc/sorting/IndirectComparator;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=6, locals=9, args_size=5
        start local 0 // int[] src
        start local 1 // int[] dst
        start local 2 // int fromIndex
        start local 3 // int toIndex
        start local 4 // com.carrotsearch.hppc.sorting.IndirectComparator comp
         0: .line 71
            iload 3 /* toIndex */
            iload 2 /* fromIndex */
            isub
            getstatic com.carrotsearch.hppc.sorting.IndirectSort.MIN_LENGTH_FOR_INSERTION_SORT:I
            if_icmpgt 3
         1: .line 72
            iload 2 /* fromIndex */
            iload 3 /* toIndex */
            iload 2 /* fromIndex */
            isub
            aload 1 /* dst */
            aload 4 /* comp */
            invokestatic com.carrotsearch.hppc.sorting.IndirectSort.insertionSort:(II[ILcom/carrotsearch/hppc/sorting/IndirectComparator;)V
         2: .line 73
            return
         3: .line 76
      StackMap locals:
      StackMap stack:
            iload 2 /* fromIndex */
            iload 3 /* toIndex */
            iadd
            iconst_1
            iushr
            istore 5 /* mid */
        start local 5 // int mid
         4: .line 77
            aload 1 /* dst */
            aload 0 /* src */
            iload 2 /* fromIndex */
            iload 5 /* mid */
            aload 4 /* comp */
            invokestatic com.carrotsearch.hppc.sorting.IndirectSort.topDownMergeSort:([I[IIILcom/carrotsearch/hppc/sorting/IndirectComparator;)V
         5: .line 78
            aload 1 /* dst */
            aload 0 /* src */
            iload 5 /* mid */
            iload 3 /* toIndex */
            aload 4 /* comp */
            invokestatic com.carrotsearch.hppc.sorting.IndirectSort.topDownMergeSort:([I[IIILcom/carrotsearch/hppc/sorting/IndirectComparator;)V
         6: .line 83
            aload 4 /* comp */
            aload 0 /* src */
            iload 5 /* mid */
            iconst_1
            isub
            iaload
            aload 0 /* src */
            iload 5 /* mid */
            iaload
            invokeinterface com.carrotsearch.hppc.sorting.IndirectComparator.compare:(II)I
            ifgt 9
         7: .line 88
            aload 0 /* src */
            iload 2 /* fromIndex */
            aload 1 /* dst */
            iload 2 /* fromIndex */
            iload 3 /* toIndex */
            iload 2 /* fromIndex */
            isub
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         8: .line 89
            goto 19
         9: .line 93
      StackMap locals: int
      StackMap stack:
            iload 2 /* fromIndex */
            istore 6 /* i */
        start local 6 // int i
        10: iload 5 /* mid */
            istore 7 /* j */
        start local 7 // int j
        11: iload 2 /* fromIndex */
            istore 8 /* k */
        start local 8 // int k
        12: goto 18
        13: .line 94
      StackMap locals: int int int
      StackMap stack:
            iload 7 /* j */
            iload 3 /* toIndex */
            if_icmpeq 14
            iload 6 /* i */
            iload 5 /* mid */
            if_icmpge 16
            aload 4 /* comp */
            aload 0 /* src */
            iload 6 /* i */
            iaload
            aload 0 /* src */
            iload 7 /* j */
            iaload
            invokeinterface com.carrotsearch.hppc.sorting.IndirectComparator.compare:(II)I
            ifgt 16
        14: .line 95
      StackMap locals:
      StackMap stack:
            aload 1 /* dst */
            iload 8 /* k */
            aload 0 /* src */
            iload 6 /* i */
            iinc 6 /* i */ 1
            iaload
            iastore
        15: .line 96
            goto 17
        16: .line 97
      StackMap locals:
      StackMap stack:
            aload 1 /* dst */
            iload 8 /* k */
            aload 0 /* src */
            iload 7 /* j */
            iinc 7 /* j */ 1
            iaload
            iastore
        17: .line 93
      StackMap locals:
      StackMap stack:
            iinc 8 /* k */ 1
      StackMap locals:
      StackMap stack:
        18: iload 8 /* k */
            iload 3 /* toIndex */
            if_icmplt 13
        end local 8 // int k
        end local 7 // int j
        end local 6 // int i
        19: .line 101
      StackMap locals:
      StackMap stack:
            return
        end local 5 // int mid
        end local 4 // com.carrotsearch.hppc.sorting.IndirectComparator comp
        end local 3 // int toIndex
        end local 2 // int fromIndex
        end local 1 // int[] dst
        end local 0 // int[] src
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   20     0        src  [I
            0   20     1        dst  [I
            0   20     2  fromIndex  I
            0   20     3    toIndex  I
            0   20     4       comp  Lcom/carrotsearch/hppc/sorting/IndirectComparator;
            4   20     5        mid  I
           10   19     6          i  I
           11   19     7          j  I
           12   19     8          k  I
    MethodParameters:
           Name  Flags
      src        
      dst        
      fromIndex  
      toIndex    
      comp       

  private static void insertionSort(int, int, int[], com.carrotsearch.hppc.sorting.IndirectComparator);
    descriptor: (II[ILcom/carrotsearch/hppc/sorting/IndirectComparator;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=8, args_size=4
        start local 0 // int off
        start local 1 // int len
        start local 2 // int[] order
        start local 3 // com.carrotsearch.hppc.sorting.IndirectComparator intComparator
         0: .line 107
            iload 0 /* off */
            iconst_1
            iadd
            istore 4 /* i */
        start local 4 // int i
         1: goto 10
         2: .line 108
      StackMap locals: int
      StackMap stack:
            aload 2 /* order */
            iload 4 /* i */
            iaload
            istore 5 /* v */
        start local 5 // int v
         3: .line 109
            iload 4 /* i */
            istore 6 /* j */
        start local 6 // int j
         4: .line 110
            goto 6
        start local 7 // int t
         5: .line 111
      StackMap locals: int int int
      StackMap stack:
            aload 2 /* order */
            iload 6 /* j */
            iinc 6 /* j */ -1
            iload 7 /* t */
            iastore
        end local 7 // int t
         6: .line 110
      StackMap locals:
      StackMap stack:
            iload 6 /* j */
            iload 0 /* off */
            if_icmple 8
            aload 3 /* intComparator */
            aload 2 /* order */
            iload 6 /* j */
            iconst_1
            isub
            iaload
            dup
            istore 7 /* t */
        start local 7 // int t
         7: iload 5 /* v */
            invokeinterface com.carrotsearch.hppc.sorting.IndirectComparator.compare:(II)I
            ifgt 5
        end local 7 // int t
         8: .line 113
      StackMap locals:
      StackMap stack:
            aload 2 /* order */
            iload 6 /* j */
            iload 5 /* v */
            iastore
        end local 6 // int j
        end local 5 // int v
         9: .line 107
            iinc 4 /* i */ 1
      StackMap locals:
      StackMap stack:
        10: iload 4 /* i */
            iload 0 /* off */
            iload 1 /* len */
            iadd
            if_icmplt 2
        end local 4 // int i
        11: .line 115
            return
        end local 3 // com.carrotsearch.hppc.sorting.IndirectComparator intComparator
        end local 2 // int[] order
        end local 1 // int len
        end local 0 // int off
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   12     0            off  I
            0   12     1            len  I
            0   12     2          order  [I
            0   12     3  intComparator  Lcom/carrotsearch/hppc/sorting/IndirectComparator;
            1   11     4              i  I
            3    9     5              v  I
            4    9     6              j  I
            5    6     7              t  I
            7    8     7              t  I
    MethodParameters:
               Name  Flags
      off            final
      len            final
      order          
      intComparator  

  private static int[] createOrderArray(int, int);
    descriptor: (II)[I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // int start
        start local 1 // int length
         0: .line 121
            iload 1 /* length */
            newarray 10
            astore 2 /* order */
        start local 2 // int[] order
         1: .line 122
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         2: goto 5
         3: .line 123
      StackMap locals: int[] int
      StackMap stack:
            aload 2 /* order */
            iload 3 /* i */
            iload 0 /* start */
            iload 3 /* i */
            iadd
            iastore
         4: .line 122
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         5: iload 3 /* i */
            iload 1 /* length */
            if_icmplt 3
        end local 3 // int i
         6: .line 125
            aload 2 /* order */
            areturn
        end local 2 // int[] order
        end local 1 // int length
        end local 0 // int start
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    7     0   start  I
            0    7     1  length  I
            1    7     2   order  [I
            2    6     3       i  I
    MethodParameters:
        Name  Flags
      start   final
      length  final
}
SourceFile: "IndirectSort.java"
InnerClasses:
  public final DelegatingComparator = com.carrotsearch.hppc.sorting.IndirectComparator$DelegatingComparator of com.carrotsearch.hppc.sorting.IndirectComparator