/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.apache.coyote.http2;

/**
 * Utility class for extracting values from byte arrays.
 */
public class ByteUtil {

    private ByteUtil() {
        // Hide default constructor
    }


    public static boolean isBit7Set(byte input) {
        return (input & 0x80) > 0;
    }


    public static int get31Bits(byte[] input, int firstByte) {
        return ((input[firstByte] & 0x7F) << 24) + ((input[firstByte + 1] & 0xFF) << 16) +
                ((input[firstByte + 2] & 0xFF) << 8) + (input[firstByte + 3] & 0xFF);
    }


    public static void set31Bits(byte[] input, int firstByte, int value) {
        input[firstByte] = (byte) ((value & 0x7F000000) >> 24);
        input[firstByte + 1] = (byte) ((value & 0xFF0000) >> 16);
        input[firstByte + 2] = (byte) ((value & 0xFF00) >> 8);
        input[firstByte + 3] = (byte) (value & 0xFF);
    }


    public static int getOneByte(byte[] input, int pos) {
        return (input[pos] & 0xFF);
    }


    public static int getTwoBytes(byte[] input, int firstByte) {
        return ((input[firstByte] & 0xFF) << 8) +  (input[firstByte + 1] & 0xFF);
    }


    public static int getThreeBytes(byte[] input, int firstByte) {
        return ((input[firstByte] & 0xFF) << 16) + ((input[firstByte + 1] & 0xFF) << 8) +
                (input[firstByte + 2] & 0xFF);
    }


    public static void setThreeBytes(byte[] input, int firstByte, int value) {
        input[firstByte] = (byte) ((value & 0xFF0000) >> 16);
        input[firstByte + 1] = (byte) ((value & 0xFF00) >> 8);
        input[firstByte + 2] = (byte) (value & 0xFF);
    }


    public static int getFourBytes(byte[] input, int firstByte) {
        return ((input[firstByte] & 0xFF) << 24) + ((input[firstByte + 1] & 0xFF) << 16) +
                ((input[firstByte + 2] & 0xFF) << 8) + (input[firstByte + 3] & 0xFF);
    }
}

@@ -1373,34 +1373,35 @@
 et31Bits(byte%5B%5D 
-in
+out
 put, int firstBy
@@ -1417,34 +1417,35 @@
 alue) %7B%0A        
-in
+out
 put%5BfirstByte%5D =
@@ -1482,34 +1482,35 @@
 %3E%3E 24);%0A        
-in
+out
 put%5BfirstByte + 
@@ -1549,34 +1549,35 @@
 %3E%3E 16);%0A        
-in
+out
 put%5BfirstByte + 
@@ -1613,34 +1613,35 @@
  %3E%3E 8);%0A        
-in
+out
 put%5BfirstByte + 
@@ -2181,34 +2181,35 @@
 reeBytes(byte%5B%5D 
-in
+out
 put, int firstBy
@@ -2225,34 +2225,35 @@
 alue) %7B%0A        
-in
+out
 put%5BfirstByte%5D =
@@ -2288,34 +2288,35 @@
 %3E%3E 16);%0A        
-in
+out
 put%5BfirstByte + 
@@ -2360,18 +2360,19 @@
         
-in
+out
 put%5Bfirs

Rename (fix copy/paste)