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

package oracle.sql.converter;

import java.sql.SQLException;

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

// flag ACC_SUPER is set
public class CharacterConverterShift extends CharacterConverter12Byte
{
    // Constants:          77
    // Interfaces:         0
    // Fields:             2
    // Methods:            5
    // Class Attributes:   1


    public final byte SHIFT_OUT = 14;
    public final byte SHIFT_IN = 15;

    // Decompiling method: <init>  Signature: ()V
    // Max stack: 2, #locals: 1, #params: 1
    // Code length: 23 bytes, Code offset: 1027
    // Line Number Table found: 5 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterShift; At 0 23 Range 0 22 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type V At 0 23 Range 0 22 Init 0 fixed
    public CharacterConverterShift()
    {
        super();
        /* SHIFT_OUT = 14; */
        /* SHIFT_IN = 15; */
        m_groupId = 7;
        return;
    }

    // Decompiling method: toOracleString  Signature: (Ljava/lang/String;)[B
    // Max stack: 5, #locals: 11, #params: 2
    // Code length: 187 bytes, Code offset: 1104
    // Line Number Table found: 32 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterShift; At 0 187 Range 0 186 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 187 Range 0 186 Init 0
    // RetValue  11 added: Name <returnValue> Type [B At 0 187 Range 0 186 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 4 149 Range 4 152 Init 4
    // LocalVar   3 added: Name ac Type [C At 16 31 Range 16 46 Init 16
    // LocalVar   4 added: Name abyte0 Type [B At 30 156 Range 30 185 Init 30
    // LocalVar   7 added: Name flag Type Z At 33 145 Range 33 177 Init 33
    // LocalVar   8 added: Name byte0 Type B At 37 80 Range 37 116 Init 37
    // LocalVar   9 added: Name flag1 Type Z At 40 112 Range 40 151 Init 40
    // LocalVar   9 chged: Name j Oname flag1 Type I At 150 2 Range 40 151 Init 40
    // LocalVar   7 chged: Name k Oname flag Type I At 156 2 Range 33 177 Init 33
    // LocalVar  10 added: Name abyte1 Type [B At 168 15 Range 168 182 Init 168
    // LocalVar   5 added: Name c Type C At 53 92 Range 53 144 Init 53
    // LocalVar   6 added: Name l Type I At 61 35 Range 61 95 Init 61
    public byte[] toOracleString(String s)
        throws SQLException
    {
        int i = s.length();
        if(i == 0)
        {
            return new byte[0];
        }
        char ac[] = new char[i];
        s.getChars(0, i, ac, 0);
        byte abyte0[] = new byte[i * 4];
        int k = 0;
        byte byte0 = 15;
        for(int l = 0; l < i; l++)
        {
            char c = toOracleCharacter(ac[l]);
            int j;
            if((j = c & 0xff00) != 0)
            {
                if(byte0 == 15)
                {
                    byte0 = 14;
                    abyte0[k++] = 14;
                }
                abyte0[k++] = (byte)(j >> 8);
                abyte0[k++] = (byte)c;
            } else
            {
                if(byte0 == 14)
                {
                    byte0 = 15;
                    abyte0[k++] = 15;
                }
                abyte0[k++] = (byte)c;
            }
        }

        if(k < abyte0.length)
        {
            byte abyte1[] = new byte[k];
            System.arraycopy(abyte0, 0, abyte1, 0, k);
            return abyte1;
        } else
        {
            return abyte0;
        }
    }

    // Decompiling method: toOracleStringWithReplacement  Signature: (Ljava/lang/String;)[B
    // Max stack: 5, #locals: 11, #params: 2
    // Code length: 208 bytes, Code offset: 1463
    // Line Number Table found: 35 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterShift; At 0 208 Range 0 207 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 208 Range 0 207 Init 0
    // RetValue  11 added: Name <returnValue> Type [B At 0 208 Range 0 207 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 4 149 Range 4 152 Init 4
    // LocalVar   3 added: Name ac Type [C At 16 31 Range 16 46 Init 16
    // LocalVar   4 added: Name abyte0 Type [B At 30 177 Range 30 206 Init 30
    // LocalVar   7 added: Name flag Type Z At 33 166 Range 33 198 Init 33
    // LocalVar   8 added: Name byte0 Type B At 37 121 Range 37 157 Init 37
    // LocalVar   9 added: Name flag1 Type Z At 40 112 Range 40 151 Init 40
    // LocalVar   9 chged: Name j Oname flag1 Type I At 150 2 Range 40 151 Init 40
    // LocalVar   8 added: Name byte1 Type B At 165 2 Range 165 166 Init 165
    // LocalVar   7 chged: Name k Oname flag Type I At 171 3 Range 33 198 Init 33
    // LocalVar  10 added: Name abyte1 Type [B At 189 15 Range 189 203 Init 189
    // LocalVar   5 added: Name c Type C At 53 92 Range 53 144 Init 53
    // LocalVar   6 added: Name l Type I At 61 35 Range 61 95 Init 61
    public byte[] toOracleStringWithReplacement(String s)
    {
        int i = s.length();
        if(i == 0)
        {
            return new byte[0];
        }
        char ac[] = new char[i];
        s.getChars(0, i, ac, 0);
        byte abyte0[] = new byte[i * 4];
        int k = 0;
        byte byte0 = 15;
        for(int l = 0; l < i; l++)
        {
            char c = toOracleCharacterWithReplacement(ac[l]);
            int j;
            if((j = c & 0xff00) != 0)
            {
                if(byte0 == 15)
                {
                    byte0 = 14;
                    abyte0[k++] = 14;
                }
                abyte0[k++] = (byte)(j >> 8);
                abyte0[k++] = (byte)c;
            } else
            {
                if(byte0 == 14)
                {
                    byte0 = 15;
                    abyte0[k++] = 15;
                }
                abyte0[k++] = (byte)c;
            }
        }

        if(byte0 == 14)
        {
            byte byte1 = 15;
            abyte0[k++] = 15;
        }
        if(k < abyte0.length)
        {
            byte abyte1[] = new byte[k];
            System.arraycopy(abyte0, 0, abyte1, 0, k);
            return abyte1;
        } else
        {
            return abyte0;
        }
    }

    // Decompiling method: toUnicodeString  Signature: ([BII)Ljava/lang/String;
    // Max stack: 5, #locals: 11, #params: 4
    // Code length: 180 bytes, Code offset: 1845
    // Line Number Table found: 29 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterShift; At 0 180 Range 0 179 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 180 Range 0 179 Init 0
    // Parameter  2 added: Name i Type I At 0 180 Range 0 179 Init 0
    // Parameter  3 added: Name j Type I At 0 180 Range 0 179 Init 0
    // RetValue  11 added: Name <returnValue> Type Ljava/lang/String; At 0 180 Range 0 179 Init 0 fixed
    // LocalVar   4 added: Name k Type I At 3 161 Range 3 163 Init 3
    // LocalVar   5 added: Name ac Type [C At 8 165 Range 8 172 Init 8
    // LocalVar   6 added: Name l Type I At 11 151 Range 11 161 Init 11
    // LocalVar   7 added: Name flag Type Z At 14 162 Range 14 175 Init 14
    // LocalVar  10 added: Name byte0 Type B At 18 45 Range 18 62 Init 18
    // LocalVar   7 chged: Name i1 Oname flag Type I At 174 2 Range 14 175 Init 14
    // LocalVar   8 added: Name j1 Type I At 76 12 Range 76 87 Init 76
    // LocalVar   8 added: Name k1 Type I At 128 12 Range 128 139 Init 128
    // LocalVar   9 hasn't been used
    public String toUnicodeString(byte abyte0[], int i, int j)
        throws SQLException
    {
        int k = i + j;
        char ac[] = new char[j];
        int l = i;
        int i1 = 0;
        byte byte0 = 15;
        while(l < k) 
        {
            if(abyte0[l] == 15)
            {
                byte0 = 15;
                l++;
            } else
            if(abyte0[l] == 14)
            {
                byte0 = 14;
                l++;
            } else
            if(byte0 == 15)
            {
                int j1 = abyte0[l] & 0xff;
                ac[i1++] = toUnicode(j1);
                l++;
            } else
            if(l < k - 1)
            {
                int k1 = abyte0[l] << 8 & 0xff00 | abyte0[l + 1] & 0xff;
                ac[i1++] = toUnicode(k1);
                l += 2;
            } else
            {
                throw new SQLException("Cannot map Oracle character to Unicode.");
            }
        }
        return new String(ac, 0, i1);
    }

    // Decompiling method: toUnicodeStringWithReplacement  Signature: ([BII)Ljava/lang/String;
    // Max stack: 5, #locals: 11, #params: 4
    // Code length: 170 bytes, Code offset: 2185
    // Line Number Table found: 28 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterShift; At 0 170 Range 0 169 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 170 Range 0 169 Init 0
    // Parameter  2 added: Name i Type I At 0 170 Range 0 169 Init 0
    // Parameter  3 added: Name j Type I At 0 170 Range 0 169 Init 0
    // RetValue  11 added: Name <returnValue> Type Ljava/lang/String; At 0 170 Range 0 169 Init 0 fixed
    // LocalVar   4 added: Name k Type I At 3 151 Range 3 153 Init 3
    // LocalVar   5 added: Name ac Type [C At 8 155 Range 8 162 Init 8
    // LocalVar   6 added: Name l Type I At 11 141 Range 11 151 Init 11
    // LocalVar   7 added: Name flag Type Z At 14 152 Range 14 165 Init 14
    // LocalVar  10 added: Name byte0 Type B At 18 45 Range 18 62 Init 18
    // LocalVar   7 chged: Name i1 Oname flag Type I At 164 2 Range 14 165 Init 14
    // LocalVar   8 added: Name j1 Type I At 76 12 Range 76 87 Init 76
    // LocalVar   8 added: Name k1 Type I At 128 12 Range 128 139 Init 128
    // LocalVar   9 hasn't been used
    public String toUnicodeStringWithReplacement(byte abyte0[], int i, int j)
    {
        int k = i + j;
        char ac[] = new char[j];
        int l = i;
        int i1 = 0;
        byte byte0 = 15;
        while(l < k) 
        {
            if(abyte0[l] == 15)
            {
                byte0 = 15;
                l++;
                continue;
            }
            if(abyte0[l] == 14)
            {
                byte0 = 14;
                l++;
                continue;
            }
            if(byte0 == 15)
            {
                int j1 = abyte0[l] & 0xff;
                ac[i1++] = toUnicodeWithReplacement(j1);
                l++;
                continue;
            }
            if(l >= k - 1)
            {
                break;
            }
            int k1 = abyte0[l] << 8 & 0xff00 | abyte0[l + 1] & 0xff;
            ac[i1++] = toUnicodeWithReplacement(k1);
            l += 2;
        }
        return new String(ac, 0, i1);
    }
}
