Home / Function/ ssMerge() — netty Function Reference

ssMerge() — netty Function Reference

Architecture documentation for the ssMerge() function in Bzip2DivSufSort.java from the netty codebase.

Function java Buffer Allocators calls 7 called by 1

Entity Profile

Dependency Diagram

graph TD
  1a5aae65_48a0_09a4_5acf_6d87a1e5c541["ssMerge()"]
  5a60cb70_bf06_95bf_9c73_ed3a4dc24eba["Bzip2DivSufSort"]
  1a5aae65_48a0_09a4_5acf_6d87a1e5c541 -->|defined in| 5a60cb70_bf06_95bf_9c73_ed3a4dc24eba
  6d0196f0_489e_2841_7424_79f0d208f4c9["subStringSort()"]
  6d0196f0_489e_2841_7424_79f0d208f4c9 -->|calls| 1a5aae65_48a0_09a4_5acf_6d87a1e5c541
  67ff73e6_3a21_9a09_e1e6_cf6b42d443c0["ssMergeBackward()"]
  1a5aae65_48a0_09a4_5acf_6d87a1e5c541 -->|calls| 67ff73e6_3a21_9a09_e1e6_cf6b42d443c0
  922d485f_ad6d_05c8_18aa_3cf8728675ee["ssMergeCheckEqual()"]
  1a5aae65_48a0_09a4_5acf_6d87a1e5c541 -->|calls| 922d485f_ad6d_05c8_18aa_3cf8728675ee
  9b4ab75c_f363_ca90_f1a9_20cc7e1e5996["ssMergeForward()"]
  1a5aae65_48a0_09a4_5acf_6d87a1e5c541 -->|calls| 9b4ab75c_f363_ca90_f1a9_20cc7e1e5996
  4de771c8_37be_d30e_9a72_bab498988da7["ssCompare()"]
  1a5aae65_48a0_09a4_5acf_6d87a1e5c541 -->|calls| 4de771c8_37be_d30e_9a72_bab498988da7
  c4528f45_3543_a91c_8ff0_9b8594168a0f["getIDX()"]
  1a5aae65_48a0_09a4_5acf_6d87a1e5c541 -->|calls| c4528f45_3543_a91c_8ff0_9b8594168a0f
  8f2018df_9270_64c3_5e3a_0e80d1e98d92["ssBlockSwap()"]
  1a5aae65_48a0_09a4_5acf_6d87a1e5c541 -->|calls| 8f2018df_9270_64c3_5e3a_0e80d1e98d92
  8c543c23_a272_46a8_3a5c_8091f5ca961f["StackEntry()"]
  1a5aae65_48a0_09a4_5acf_6d87a1e5c541 -->|calls| 8c543c23_a272_46a8_3a5c_8091f5ca961f
  style 1a5aae65_48a0_09a4_5acf_6d87a1e5c541 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-compression/src/main/java/io/netty/handler/codec/compression/Bzip2DivSufSort.java lines 744–859

    private void ssMerge(final int pa, int first, int middle, int last, int[] buf,
                         final int bufoffset, final int bufsize, final int depth) {
        final int[] SA = this.SA;

        final StackEntry[] stack = new StackEntry[STACK_SIZE];

        int i, j;
        int m, len, half;
        int ssize;
        int check, next;

        for (check = 0, ssize = 0;;) {

            if (last - middle <= bufsize) {
                if (first < middle && middle < last) {
                    ssMergeBackward(pa, buf, bufoffset, first, middle, last, depth);
                }

                if ((check & 1) != 0) {
                    ssMergeCheckEqual(pa, depth, first);
                }
                if ((check & 2) != 0) {
                    ssMergeCheckEqual(pa, depth, last);
                }
                if (ssize == 0) {
                    return;
                }
                StackEntry entry = stack[--ssize];
                first = entry.a;
                middle = entry.b;
                last = entry.c;
                check = entry.d;
                continue;
            }

            if (middle - first <= bufsize) {
                if (first < middle) {
                    ssMergeForward(pa, buf, bufoffset, first, middle, last, depth);
                }
                if ((check & 1) != 0) {
                    ssMergeCheckEqual(pa, depth, first);
                }
                if ((check & 2) != 0) {
                    ssMergeCheckEqual(pa, depth, last);
                }
                if (ssize == 0) {
                    return;
                }
                StackEntry entry = stack[--ssize];
                first = entry.a;
                middle = entry.b;
                last = entry.c;
                check = entry.d;
                continue;
            }

            for (m = 0, len = Math.min(middle - first, last - middle), half = len >> 1;
                    0 < len;
                    len = half, half >>= 1) {

                if (ssCompare(pa + getIDX(SA[middle + m + half]),
                        pa + getIDX(SA[middle - m - half - 1]), depth) < 0) {
                    m += half + 1;
                    half -= (len & 1) ^ 1;
                }
            }

            if (0 < m) {
                ssBlockSwap(SA, middle - m, SA, middle, m);
                i = j = middle;
                next = 0;
                if (middle + m < last) {
                    if (SA[middle + m] < 0) {
                        while (SA[i - 1] < 0) {
                            --i;
                        }
                        SA[middle + m] = ~SA[middle + m];
                    }
                    for (j = middle; SA[j] < 0;) {
                        ++j;
                    }

Domain

Subdomains

Called By

Frequently Asked Questions

What does ssMerge() do?
ssMerge() is a function in the netty codebase, defined in codec-compression/src/main/java/io/netty/handler/codec/compression/Bzip2DivSufSort.java.
Where is ssMerge() defined?
ssMerge() is defined in codec-compression/src/main/java/io/netty/handler/codec/compression/Bzip2DivSufSort.java at line 744.
What does ssMerge() call?
ssMerge() calls 7 function(s): StackEntry, getIDX, ssBlockSwap, ssCompare, ssMergeBackward, ssMergeCheckEqual, ssMergeForward.
What calls ssMerge()?
ssMerge() is called by 1 function(s): subStringSort.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free