// Decompiled by Jad v1.5.7f. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) braces deadcode fieldsfirst 
// Source File Name:   CharacterSetGB18030.java
// Class Version:      45.3

package oracle.sql;

import java.sql.SQLException;
import oracle.sql.converter.CharacterConverter;
import oracle.sql.converter.CharacterConverterGB18030;

// Referenced classes of package oracle.sql:
//            CharacterSetWithConverter, CharacterBuffer, CharacterSet, CharacterWalker

// flag ACC_SUPER is set
class CharacterSetGB18030 extends CharacterSetWithConverter
{
    // Constants:          62
    // Interfaces:         0
    // Fields:             2
    // Methods:            4
    // Class Attributes:   1


    static final int MAX_7BIT = 127;
    static Class m_charConvSuperclass;

    // Decompiling method: <init>  Signature: (ILoracle/sql/converter/CharacterConverterGB18030;)V
    // Max stack: 3, #locals: 3, #params: 3
    // Code length: 7 bytes, Code offset: 989
    // Line Number Table found: 2 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetGB18030; At 0 7 Range 0 6 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 7 Range 0 6 Init 0
    // Parameter  2 added: Name characterconvertergb18030 Type Loracle/sql/converter/CharacterConverterGB18030; At 0 7 Range 0 6 Init 0
    // RetValue   3 added: Name <returnValue> Type V At 0 7 Range 0 6 Init 0 fixed
    CharacterSetGB18030(int i, CharacterConverterGB18030 characterconvertergb18030)
    {
        super(i, characterconvertergb18030);
        return;
    }

    // Decompiling method: decode  Signature: (Loracle/sql/CharacterWalker;)I
    // Max stack: 4, #locals: 3, #params: 2
    // Code length: 387 bytes, Code offset: 1038
    // Line Number Table found: 33 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetGB18030; At 0 387 Range 0 386 Init 0 fixed
    // Parameter  1 added: Name characterwalker Type Loracle/sql/CharacterWalker; At 0 387 Range 0 386 Init 0
    // RetValue   3 added: Name <returnValue> Type I At 0 387 Range 0 386 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 13 373 Range 13 385 Init 13
    int decode(CharacterWalker characterwalker)
        throws SQLException
    {
        int i = characterwalker.bytes[characterwalker.next] & 0xff;
        if(i > 127)
        {
            if(characterwalker.bytes.length > characterwalker.next + 1)
            {
                if((characterwalker.bytes[characterwalker.next] & 0xff) >= 129 && (characterwalker.bytes[characterwalker.next] & 0xff) <= 254 && (characterwalker.bytes[characterwalker.next + 1] & 0xff) >= 48 && (characterwalker.bytes[characterwalker.next + 1] & 0xff) <= 57)
                {
                    if(characterwalker.bytes.length > characterwalker.next + 3)
                    {
                        if((characterwalker.bytes[characterwalker.next + 2] & 0xff) >= 129 && (characterwalker.bytes[characterwalker.next + 2] & 0xff) <= 254 && (characterwalker.bytes[characterwalker.next + 3] & 0xff) >= 48 && (characterwalker.bytes[characterwalker.next + 3] & 0xff) <= 57)
                        {
                            i = (characterwalker.bytes[characterwalker.next] & 0xff) << 24 | (characterwalker.bytes[characterwalker.next + 1] & 0xff) << 16 | (characterwalker.bytes[characterwalker.next + 2] & 0xff) << 8 | characterwalker.bytes[characterwalker.next + 3] & 0xff;
                            characterwalker.next += 4;
                        } else
                        {
                            i = characterwalker.bytes[characterwalker.next] & 0xff;
                            characterwalker.next++;
                        }
                    } else
                    {
                        throw new SQLException("destination too small");
                    }
                } else
                {
                    i = (characterwalker.bytes[characterwalker.next] & 0xff) << 8 | characterwalker.bytes[characterwalker.next + 1] & 0xff;
                    characterwalker.next += 2;
                }
            } else
            {
                throw new SQLException("destination too small");
            }
        }
        return i;
    }

    // Decompiling method: encode  Signature: (Loracle/sql/CharacterBuffer;I)V
    // Max stack: 5, #locals: 5, #params: 3
    // Code length: 106 bytes, Code offset: 1601
    // Line Number Table found: 22 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetGB18030; At 0 106 Range 0 105 Init 0 fixed
    // Parameter  1 added: Name characterbuffer Type Loracle/sql/CharacterBuffer; At 0 106 Range 0 105 Init 0
    // Parameter  2 added: Name i Type I At 0 106 Range 0 105 Init 0
    // RetValue   5 added: Name <returnValue> Type V At 0 106 Range 0 105 Init 0 fixed
    // LocalVar   3 added: Name flag Type Z At 1 22 Range 1 22 Init 1
    // LocalVar   4 added: Name flag1 Type Z At 3 13 Range 3 15 Init 3
    // LocalVar   3 chged: Name j Oname flag Type I At 22 1 Range 1 22 Init 1
    // LocalVar   3 added: Name byte0 Type B At 35 67 Range 35 101 Init 35
    // LocalVar   4 added: Name byte1 Type B At 37 28 Range 37 64 Init 37
    // LocalVar   3 chged: Name word0 Oname j Type S At 8 15 Range 1 22 Init 1
    // LocalVar   4 chged: Name j Oname flag1 Type I At 14 2 Range 3 15 Init 3
    // LocalVar   4 chged: Name word1 Oname j Type S At 14 7 Range 3 20 Init 3
    // LocalVar   3 chged: Name word2 Oname byte0 Type S At 87 15 Range 35 101 Init 35
    // LocalVar   3 name word2(S) merged out into word0(S)
    void encode(CharacterBuffer characterbuffer, int i)
        throws SQLException
    {
        short word0 = 0;
        for(short word1 = 0; i >> word0 != 0; word1++)
        {
            word0 += 8;
        }

        byte byte0;
        if(i >> 16 != 0)
        {
            word0 = 3;
            byte0 = 4;
        } else
        if(i >> 8 != 0)
        {
            word0 = 1;
            byte0 = 2;
        } else
        {
            word0 = 0;
            byte0 = 1;
        }
        CharacterSet.need(characterbuffer, byte0);
        for(; word0 >= 0; word0 -= 8)
        {
            characterbuffer.bytes[characterbuffer.next++] = (byte)(i >> word0 & 0xff);
        }

        return;
    }

    // Decompiling method: getInstance  Signature: (ILoracle/sql/converter/CharacterConverter;)Loracle/sql/CharacterSetGB18030;
    // Max stack: 4, #locals: 2, #params: 2
    // Code length: 24 bytes, Code offset: 1839
    // Line Number Table found: 6 entries
    // Parameter  0 added: Name i Type I At 0 24 Range 0 23 Init 0
    // Parameter  1 added: Name characterconverter Type Loracle/sql/converter/CharacterConverter; At 0 24 Range 0 23 Init 0
    // RetValue   2 added: Name <returnValue> Type Loracle/sql/CharacterSetGB18030; At 0 24 Range 0 23 Init 0 fixed
    static CharacterSetGB18030 getInstance(int i, CharacterConverter characterconverter)
    {
        if(characterconverter.getGroupId() == 9)
        {
            return new CharacterSetGB18030(i, (CharacterConverterGB18030)characterconverter);
        } else
        {
            return null;
        }
    }
}
