Home / Class/ AsciiStringUtil Class — netty Architecture

AsciiStringUtil Class — netty Architecture

Architecture documentation for the AsciiStringUtil class in AsciiStringUtil.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  84873396_ba4c_3002_b5f9_9b7743d03751["AsciiStringUtil"]
  121ad8a4_6f42_e57b_99a0_440e265cbc75["AsciiStringUtil.java"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|defined in| 121ad8a4_6f42_e57b_99a0_440e265cbc75
  58ce1a46_a851_3cdb_7866_9d7058c6d7dc["AsciiString()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| 58ce1a46_a851_3cdb_7866_9d7058c6d7dc
  b1bfa746_05ac_cde4_0422_8b8d974c5698["containsUpperCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| b1bfa746_05ac_cde4_0422_8b8d974c5698
  cc783f21_4dad_8ac3_503e_a4fdeaf2d428["linearContainsUpperCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| cc783f21_4dad_8ac3_503e_a4fdeaf2d428
  631f21b0_b5b9_3bc9_4f06_5bec37499ba1["unrolledContainsUpperCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| 631f21b0_b5b9_3bc9_4f06_5bec37499ba1
  b3010567_92f1_0afe_995f_c513e385142f["toLowerCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| b3010567_92f1_0afe_995f_c513e385142f
  c2c8955b_a516_e67d_eb69_171073ae486c["linearToLowerCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| c2c8955b_a516_e67d_eb69_171073ae486c
  293a26d5_1277_f133_0dbc_9358b4b043b5["unrolledToLowerCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| 293a26d5_1277_f133_0dbc_9358b4b043b5
  21106794_3e29_aab2_bb7f_344a799d8acc["containsLowerCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| 21106794_3e29_aab2_bb7f_344a799d8acc
  c2ee3a38_b203_eb6b_de8d_1ff84daa073c["linearContainsLowerCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| c2ee3a38_b203_eb6b_de8d_1ff84daa073c
  bd46daab_535a_f639_4851_df731a593516["unrolledContainsLowerCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| bd46daab_535a_f639_4851_df731a593516
  4145ce36_ee3b_ee17_ea11_7e3ee9de39d1["toUpperCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| 4145ce36_ee3b_ee17_ea11_7e3ee9de39d1
  3cc61e9d_c193_86a8_9877_a788263a1913["linearToUpperCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| 3cc61e9d_c193_86a8_9877_a788263a1913
  6a5e7782_4c2b_e42a_a9cd_12fc1f861554["unrolledToUpperCase()"]
  84873396_ba4c_3002_b5f9_9b7743d03751 -->|method| 6a5e7782_4c2b_e42a_a9cd_12fc1f861554

Relationship Graph

Source Code

common/src/main/java/io/netty/util/AsciiStringUtil.java lines 24–291

final class AsciiStringUtil {

    /**
     * Convert the {@link AsciiString} to a lower case.
     *
     * @param string the {@link AsciiString} to convert
     * @return the new {@link AsciiString} in lower case
     */
    static AsciiString toLowerCase(final AsciiString string) {
        final byte[] byteArray = string.array();
        final int offset = string.arrayOffset();
        final int length = string.length();
        if (!containsUpperCase(byteArray, offset, length)) {
            return string;
        }
        final byte[] newByteArray = PlatformDependent.allocateUninitializedArray(length);
        toLowerCase(byteArray, offset, newByteArray);
        return new AsciiString(newByteArray, false);
    }

    private static boolean containsUpperCase(final byte[] byteArray, int offset, final int length) {
        if (!PlatformDependent.isUnaligned()) {
            return linearContainsUpperCase(byteArray, offset, length);
        }

        final int longCount = length >>> 3;
        for (int i = 0; i < longCount; ++i) {
            final long word = PlatformDependent.getLong(byteArray, offset);
            if (SWARUtil.containsUpperCase(word)) {
                return true;
            }
            offset += Long.BYTES;
        }
        return unrolledContainsUpperCase(byteArray, offset, length & 7);
    }

    private static boolean linearContainsUpperCase(final byte[] byteArray, final int offset, final int length) {
        final int end = offset + length;
        for (int idx = offset; idx < end; ++idx) {
            if (isUpperCase(byteArray[idx])) {
                return true;
            }
        }
        return false;
    }

    private static boolean unrolledContainsUpperCase(final byte[] byteArray, int offset, final int byteCount) {
        assert byteCount >= 0 && byteCount < 8;
        if ((byteCount & Integer.BYTES) != 0) {
            final int word = PlatformDependent.getInt(byteArray, offset);
            if (SWARUtil.containsUpperCase(word)) {
                return true;
            }
            offset += Integer.BYTES;
        }
        if ((byteCount & Short.BYTES) != 0) {
            if (isUpperCase(PlatformDependent.getByte(byteArray, offset))) {
                return true;
            }
            if (isUpperCase(PlatformDependent.getByte(byteArray, offset + 1))) {
                return true;
            }
            offset += Short.BYTES;
        }
        if ((byteCount & Byte.BYTES) != 0) {
            return isUpperCase(PlatformDependent.getByte(byteArray, offset));
        }
        return false;
    }

    private static void toLowerCase(final byte[] src, final int srcOffset, final byte[] dst) {
        if (!PlatformDependent.isUnaligned()) {
            linearToLowerCase(src, srcOffset, dst);
            return;
        }

        final int length = dst.length;
        final int longCount = length >>> 3;
        int offset = 0;
        for (int i = 0; i < longCount; ++i) {
            final long word = PlatformDependent.getLong(src, srcOffset + offset);

Frequently Asked Questions

What is the AsciiStringUtil class?
AsciiStringUtil is a class in the netty codebase, defined in common/src/main/java/io/netty/util/AsciiStringUtil.java.
Where is AsciiStringUtil defined?
AsciiStringUtil is defined in common/src/main/java/io/netty/util/AsciiStringUtil.java at line 24.

Analyze Your Own Codebase

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

Try Supermodel Free