// 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:   CharacterConverterZHTEUC.java
// Class Version:      45.3

package oracle.sql.converter;

import java.sql.SQLException;

// Referenced classes of package oracle.sql.converter:
//            CharacterConverterLC, CharacterConverter

// flag ACC_SUPER is set
public class CharacterConverterZHTEUC extends CharacterConverterLC
{
    // Constants:          60
    // Interfaces:         0
    // Fields:             0
    // Methods:            3
    // Class Attributes:   1


    // Decompiling method: <init>  Signature: ()V
    // Max stack: 2, #locals: 1, #params: 1
    // Code length: 10 bytes, Code offset: 771
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterZHTEUC; At 0 10 Range 0 9 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type V At 0 10 Range 0 9 Init 0 fixed
    public CharacterConverterZHTEUC()
    {
        super();
        m_groupId = 5;
        return;
    }

    // Decompiling method: toUnicodeString  Signature: ([BII)Ljava/lang/String;
    // Max stack: 5, #locals: 12, #params: 4
    // Code length: 256 bytes, Code offset: 827
    // Line Number Table found: 36 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterZHTEUC; At 0 256 Range 0 255 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 256 Range 0 255 Init 0
    // Parameter  2 added: Name i Type I At 0 256 Range 0 255 Init 0
    // Parameter  3 added: Name j Type I At 0 256 Range 0 255 Init 0
    // RetValue  12 added: Name <returnValue> Type Ljava/lang/String; At 0 256 Range 0 255 Init 0 fixed
    // LocalVar   4 added: Name ac Type [C At 3 246 Range 3 248 Init 3
    // LocalVar   5 added: Name flag Type Z At 6 246 Range 6 251 Init 6
    // LocalVar   5 chged: Name k Oname flag Type I At 250 2 Range 6 251 Init 6
    // LocalVar   6 added: Name l Type I At 18 157 Range 18 174 Init 18
    // LocalVar   9 added: Name flag Type Z At 21 216 Range 21 236 Init 21
    // LocalVar   8 added: Name flag1 Type Z At 24 146 Range 24 169 Init 24
    // LocalVar   9 chged: Name byte0 Oname flag Type B At 66 171 Range 21 236 Init 21
    // LocalVar  10 added: Name flag Type Z At 69 79 Range 69 147 Init 69
    // LocalVar  10 chged: Name i1 Oname flag Type I At 146 2 Range 69 147 Init 69
    // LocalVar   8 chged: Name j1 Oname flag1 Type I At 168 2 Range 24 169 Init 24
    // LocalVar  10 added: Name k1 Type I At 171 21 Range 171 191 Init 171
    // LocalVar  11 added: Name l1 Type I At 180 15 Range 180 194 Init 180
    // LocalVar   7 added: Name c Type C At 197 30 Range 197 226 Init 197
    // LocalVar   7 chged: Name i2 Oname c Type I At 225 2 Range 197 226 Init 197
    public String toUnicodeString(byte abyte0[], int i, int j)
        throws SQLException
    {
        char ac[] = new char[j];
        int k = 0;
        while(j > 0) 
        {
            int l = abyte0[i] & 0xff;
            byte byte0 = 1;
            int j1 = 0;
            if(l > 127)
            {
                if(j < 2)
                {
                    throw new SQLException("Cannot map Oracle character to Unicode.");
                }
                l = l << 8 | abyte0[i + 1] & 0xff;
                byte0 = 2;
                for(int k1 = 0; k1 < m_ucsCharLeadingCode.length; k1++)
                {
                    if(l != m_ucsCharLeadingCode[k1][0])
                    {
                        continue;
                    }
                    if(j < 4)
                    {
                        throw new SQLException("Cannot map Oracle character to Unicode.");
                    }
                    j1 = m_ucsCharLeadingCode[k1][1];
                    l = abyte0[i + 2] << 8 & 0xff00 | abyte0[i + 3] & 0xff;
                    byte0 = 4;
                    break;
                }

            }
            int l1 = (l >> m_ucsL1KeyShift & m_ucsL1KeyMask) + j1;
            int i2 = l & m_ucsL2KeyMask;
            int i1 = m_ucsCharLevel2[m_ucsCharLevel1[l1] + i2];
            if(i1 == m_ucsCharReplacement)
            {
                throw new SQLException("Cannot map Oracle character to Unicode.");
            }
            ac[k++] = (char)i1;
            j -= byte0;
            i += byte0;
        }
        return new String(ac, 0, k);
    }

    // Decompiling method: toUnicodeStringWithReplacement  Signature: ([BII)Ljava/lang/String;
    // Max stack: 5, #locals: 12, #params: 4
    // Code length: 225 bytes, Code offset: 1271
    // Line Number Table found: 34 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterZHTEUC; At 0 225 Range 0 224 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 225 Range 0 224 Init 0
    // Parameter  2 added: Name i Type I At 0 225 Range 0 224 Init 0
    // Parameter  3 added: Name j Type I At 0 225 Range 0 224 Init 0
    // RetValue  12 added: Name <returnValue> Type Ljava/lang/String; At 0 225 Range 0 224 Init 0 fixed
    // LocalVar   4 added: Name ac Type [C At 3 215 Range 3 217 Init 3
    // LocalVar   5 added: Name flag Type Z At 6 215 Range 6 220 Init 6
    // LocalVar   5 chged: Name k Oname flag Type I At 219 2 Range 6 220 Init 6
    // LocalVar   6 added: Name l Type I At 18 150 Range 18 167 Init 18
    // LocalVar   9 added: Name flag Type Z At 21 185 Range 21 205 Init 21
    // LocalVar   8 added: Name flag1 Type Z At 24 139 Range 24 162 Init 24
    // LocalVar   9 chged: Name byte0 Oname flag Type B At 56 150 Range 21 205 Init 21
    // LocalVar  10 added: Name flag Type Z At 59 82 Range 59 140 Init 59
    // LocalVar  10 chged: Name i1 Oname flag Type I At 139 2 Range 59 140 Init 59
    // LocalVar   8 chged: Name j1 Oname flag1 Type I At 161 2 Range 24 162 Init 24
    // LocalVar  10 added: Name k1 Type I At 164 28 Range 164 191 Init 164
    // LocalVar  11 added: Name l1 Type I At 173 22 Range 173 194 Init 173
    // LocalVar   7 hasn't been used
    public String toUnicodeStringWithReplacement(byte abyte0[], int i, int j)
    {
        char ac[] = new char[j];
        int k = 0;
        while(j > 0) 
        {
            int l = abyte0[i] & 0xff;
            byte byte0 = 1;
            int i1 = 0;
            if(l > 127)
            {
                if(j < 2)
                {
                    break;
                }
                l = l << 8 | abyte0[i + 1] & 0xff;
                byte0 = 2;
                for(int j1 = 0; j1 < m_ucsCharLeadingCode.length; j1++)
                {
                    if(l != m_ucsCharLeadingCode[j1][0])
                    {
                        continue;
                    }
                    i1 = m_ucsCharLeadingCode[j1][1];
                    if(j < 4)
                    {
                        return new String(ac, 0, k);
                    }
                    l = abyte0[i + 2] << 8 & 0xff00 | abyte0[i + 3] & 0xff;
                    byte0 = 4;
                    break;
                }

            }
            int k1 = (l >> m_ucsL1KeyShift & m_ucsL1KeyMask) + i1;
            int l1 = l & m_ucsL2KeyMask;
            ac[k++] = m_ucsCharLevel2[m_ucsCharLevel1[k1] + l1];
            j -= byte0;
            i += byte0;
        }
        return new String(ac, 0, k);
    }
}
