// 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:   CharacterConverterLCFixed.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 CharacterConverterLCFixed extends CharacterConverterLC
{
    // Constants:          91
    // Interfaces:         0
    // Fields:             2
    // Methods:            5
    // Class Attributes:   1


    static final int ORACHARBYTECNT = 4;
    public int m_4ByteOraCharReplacement;

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

    // Decompiling method: toOracleCharacter  Signature: (C)I
    // Max stack: 3, #locals: 8, #params: 2
    // Code length: 105 bytes, Code offset: 1218
    // Line Number Table found: 16 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLCFixed; At 0 105 Range 0 104 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 105 Range 0 104 Init 0
    // RetValue   8 added: Name <returnValue> Type I At 0 105 Range 0 104 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 11 13 Range 11 23 Init 11
    // LocalVar   3 added: Name j Type I At 18 8 Range 18 25 Init 18
    // LocalVar   4 added: Name k Type I At 27 22 Range 27 48 Init 27
    // LocalVar   5 added: Name c1 Type C At 36 68 Range 36 103 Init 36
    // LocalVar   6 added: Name l Type I At 57 8 Range 57 64 Init 57
    // LocalVar   7 added: Name c2 Type C At 68 11 Range 68 78 Init 68
    // LocalVar   5 chged: Name i1 Oname c1 Type I At 83 21 Range 36 103 Init 36
    int toOracleCharacter(char c)
        throws SQLException
    {
        int i = c >> m_oraL1KeyShift & m_oraL1KeyMask;
        int j = c & m_oraL2KeyMask;
        int k = m_oraCharLevel1[i] + j;
        int l = m_oraCharLevel2[k];
        int i1 = m_oraLcIndex[k / 2] >> (k % 2) * 4 & 0xf;
        char c1 = m_ucsCharLeadingCode[i1][0];
        if(c1 != 0)
        {
            l |= c1 << 16;
        }
        if(l == 65535)
        {
            throw new SQLException("Cannot map Unicode to Oracle character.");
        } else
        {
            return l;
        }
    }

    // Decompiling method: toOracleCharacterWithReplacement  Signature: (C)I
    // Max stack: 3, #locals: 8, #params: 2
    // Code length: 100 bytes, Code offset: 1431
    // Line Number Table found: 16 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLCFixed; At 0 100 Range 0 99 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 100 Range 0 99 Init 0
    // RetValue   8 added: Name <returnValue> Type I At 0 100 Range 0 99 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 11 13 Range 11 23 Init 11
    // LocalVar   3 added: Name j Type I At 18 8 Range 18 25 Init 18
    // LocalVar   4 added: Name k Type I At 27 22 Range 27 48 Init 27
    // LocalVar   5 added: Name c1 Type C At 36 63 Range 36 98 Init 36
    // LocalVar   6 added: Name l Type I At 57 8 Range 57 64 Init 57
    // LocalVar   7 added: Name c2 Type C At 68 11 Range 68 78 Init 68
    // LocalVar   5 chged: Name i1 Oname c1 Type I At 83 16 Range 36 98 Init 36
    int toOracleCharacterWithReplacement(char c)
    {
        int i = c >> m_oraL1KeyShift & m_oraL1KeyMask;
        int j = c & m_oraL2KeyMask;
        int k = m_oraCharLevel1[i] + j;
        int l = m_oraCharLevel2[k];
        int i1 = m_oraLcIndex[k / 2] >> (k % 2) * 4 & 0xf;
        char c1 = m_ucsCharLeadingCode[i1][0];
        if(c1 != 0)
        {
            l |= c1 << 16;
        }
        if(l == 65535)
        {
            return m_4ByteOraCharReplacement;
        } else
        {
            return l;
        }
    }

    // Decompiling method: toUnicodeString  Signature: ([BII)Ljava/lang/String;
    // Max stack: 5, #locals: 13, #params: 4
    // Code length: 223 bytes, Code offset: 1629
    // Line Number Table found: 29 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLCFixed; At 0 223 Range 0 222 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 223 Range 0 222 Init 0
    // Parameter  2 added: Name i Type I At 0 223 Range 0 222 Init 0
    // Parameter  3 added: Name j Type I At 0 223 Range 0 222 Init 0
    // RetValue  13 added: Name <returnValue> Type Ljava/lang/String; At 0 223 Range 0 222 Init 0 fixed
    // LocalVar   4 added: Name ac Type [C At 3 213 Range 3 215 Init 3
    // LocalVar   5 added: Name flag Type Z At 6 213 Range 6 218 Init 6
    // LocalVar   5 chged: Name k Oname flag Type I At 217 2 Range 6 218 Init 6
    // LocalVar   7 added: Name l Type I At 30 10 Range 30 39 Init 30
    // LocalVar  10 added: Name flag Type Z At 33 140 Range 33 172 Init 33
    // LocalVar  10 chged: Name i1 Oname flag Type I At 171 2 Range 33 172 Init 33
    // LocalVar   9 added: Name c Type C At 61 39 Range 61 99 Init 61
    // LocalVar   6 added: Name j1 Type I At 84 21 Range 84 104 Init 84
    // LocalVar  11 added: Name k1 Type I At 101 21 Range 101 121 Init 101
    // LocalVar  12 added: Name l1 Type I At 110 15 Range 110 124 Init 110
    // LocalVar   8 added: Name c1 Type C At 127 30 Range 127 156 Init 127
    // LocalVar   8 chged: Name i2 Oname c1 Type I At 155 2 Range 127 156 Init 127
    public String toUnicodeString(byte abyte0[], int i, int j)
        throws SQLException
    {
        char ac[] = new char[j];
        int k;
        for(k = 0; j >= 4;)
        {
            int i1 = abyte0[i] << 8 & 0xff00 | abyte0[i + 1] & 0xff;
            for(int k1 = 0; k1 < m_ucsCharLeadingCode.length; k1++)
            {
                if(i1 != m_ucsCharLeadingCode[k1][0])
                {
                    continue;
                }
                char c = m_ucsCharLeadingCode[k1][1];
                int l = abyte0[i + 2] << 8 & 0xff00 | abyte0[i + 3] & 0xff;
                int l1 = (l >> m_ucsL1KeyShift & m_ucsL1KeyMask) + c;
                int i2 = l & m_ucsL2KeyMask;
                int j1 = m_ucsCharLevel2[m_ucsCharLevel1[l1] + i2];
                if(j1 == m_ucsCharReplacement)
                {
                    throw new SQLException("Cannot map Oracle character to Unicode.");
                }
                ac[k++] = (char)j1;
                j -= 4;
                i += 4;
                break;
            }

            throw new SQLException("Cannot map Oracle character to Unicode.");
        }

        if(j != 0)
        {
            throw new SQLException("Cannot map Oracle character to Unicode.");
        } else
        {
            return new String(ac, 0, k);
        }
    }

    // Decompiling method: toUnicodeStringWithReplacement  Signature: ([BII)Ljava/lang/String;
    // Max stack: 5, #locals: 13, #params: 4
    // Code length: 186 bytes, Code offset: 2012
    // Line Number Table found: 25 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLCFixed; At 0 186 Range 0 185 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 186 Range 0 185 Init 0
    // Parameter  2 added: Name i Type I At 0 186 Range 0 185 Init 0
    // Parameter  3 added: Name j Type I At 0 186 Range 0 185 Init 0
    // RetValue  13 added: Name <returnValue> Type Ljava/lang/String; At 0 186 Range 0 185 Init 0 fixed
    // LocalVar   4 added: Name ac Type [C At 3 176 Range 3 178 Init 3
    // LocalVar   5 added: Name flag Type Z At 6 176 Range 6 181 Init 6
    // LocalVar   5 chged: Name k Oname flag Type I At 180 2 Range 6 181 Init 6
    // LocalVar   7 added: Name l Type I At 30 16 Range 30 45 Init 30
    // LocalVar   8 added: Name c Type C At 36 124 Range 36 159 Init 36
    // LocalVar  10 added: Name flag Type Z At 39 104 Range 39 142 Init 39
    // LocalVar  10 chged: Name i1 Oname flag Type I At 141 2 Range 39 142 Init 39
    // LocalVar   8 chged: Name j1 Oname c Type I At 158 2 Range 36 159 Init 36
    // LocalVar   9 added: Name c Type C At 67 39 Range 67 105 Init 67
    // LocalVar   6 added: Name k1 Type I At 90 21 Range 90 110 Init 90
    // LocalVar  11 added: Name l1 Type I At 107 21 Range 107 127 Init 107
    // LocalVar  12 added: Name i2 Type I At 116 15 Range 116 130 Init 116
    public String toUnicodeStringWithReplacement(byte abyte0[], int i, int j)
    {
        char ac[] = new char[j];
        int k = 0;
        while(j >= 4) 
        {
            int i1 = abyte0[i] << 8 & 0xff00 | abyte0[i + 1] & 0xff;
            int j1 = m_ucsCharReplacement;
            for(int k1 = 0; k1 < m_ucsCharLeadingCode.length; k1++)
            {
                if(i1 != m_ucsCharLeadingCode[k1][0])
                {
                    continue;
                }
                char c = m_ucsCharLeadingCode[k1][1];
                int l = abyte0[i + 2] << 8 & 0xff00 | abyte0[i + 3] & 0xff;
                int l1 = (l >> m_ucsL1KeyShift & m_ucsL1KeyMask) + c;
                int i2 = l & m_ucsL2KeyMask;
                j1 = m_ucsCharLevel2[m_ucsCharLevel1[l1] + i2];
                break;
            }

            ac[k++] = (char)j1;
            j -= 4;
            i += 4;
        }
        return new String(ac, 0, k);
    }
}
