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

package oracle.sql;

import java.sql.SQLException;

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

// flag ACC_SUPER is set
class CharacterSetUTF extends CharacterSet
    implements CharacterRepConstants
{
    // Constants:          88
    // Interfaces:         1
    // Fields:             0
    // Methods:            11
    // Class Attributes:   1


    // Decompiling method: <init>  Signature: (I)V
    // Max stack: 2, #locals: 2, #params: 2
    // Code length: 11 bytes, Code offset: 1014
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 11 Range 0 10 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 11 Range 0 10 Init 0
    // RetValue   2 added: Name <returnValue> Type V At 0 11 Range 0 10 Init 0 fixed
    CharacterSetUTF(int i)
    {
        super(i);
        rep = 2;
        return;
    }

    // Decompiling method: convert  Signature: (Ljava/lang/String;)[B
    // Max stack: 1, #locals: 2, #params: 2
    // Code length: 5 bytes, Code offset: 1071
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 5 Range 0 4 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 5 Range 0 4 Init 0
    // RetValue   2 added: Name <returnValue> Type [B At 0 5 Range 0 4 Init 0 fixed
    public byte[] convert(String s)
        throws SQLException
    {
        return CharacterSet.stringToUTF(s);
    }

    // Decompiling method: convert  Signature: (Loracle/sql/CharacterSet;[BII)[B
    // Max stack: 4, #locals: 7, #params: 5
    // Code length: 40 bytes, Code offset: 1124
    // Line Number Table found: 6 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 40 Range 0 39 Init 0 fixed
    // Parameter  1 added: Name characterset Type Loracle/sql/CharacterSet; At 0 40 Range 0 39 Init 0
    // Parameter  2 added: Name abyte0 Type [B At 0 40 Range 0 39 Init 0
    // Parameter  3 added: Name i Type I At 0 40 Range 0 39 Init 0
    // Parameter  4 added: Name j Type I At 0 40 Range 0 39 Init 0
    // RetValue   7 added: Name <returnValue> Type [B At 0 40 Range 0 39 Init 0 fixed
    // LocalVar   5 added: Name abyte1 Type [B At 15 24 Range 15 38 Init 15
    // LocalVar   6 added: Name s Type Ljava/lang/String; At 28 4 Range 28 31 Init 28
    public byte[] convert(CharacterSet characterset, byte abyte0[], int i, int j)
        throws SQLException
    {
        byte abyte1[];
        if(characterset.rep == 2)
        {
            abyte1 = CharacterSet.useOrCopy(abyte0, i, j);
        } else
        {
            String s = characterset.toString(abyte0, i, j);
            abyte1 = CharacterSet.stringToUTF(s);
        }
        return abyte1;
    }

    // Decompiling method: convertWithReplacement  Signature: (Ljava/lang/String;)[B
    // Max stack: 1, #locals: 2, #params: 2
    // Code length: 5 bytes, Code offset: 1232
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 5 Range 0 4 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 5 Range 0 4 Init 0
    // RetValue   2 added: Name <returnValue> Type [B At 0 5 Range 0 4 Init 0 fixed
    public byte[] convertWithReplacement(String s)
    {
        return CharacterSet.stringToUTF(s);
    }

    // Decompiling method: decode  Signature: (Loracle/sql/CharacterWalker;)I
    // Max stack: 3, #locals: 10, #params: 2
    // Code length: 282 bytes, Code offset: 1275
    // Line Number Table found: 34 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 282 Range 0 281 Init 0 fixed
    // Parameter  1 added: Name characterwalker Type Loracle/sql/CharacterWalker; At 0 282 Range 0 281 Init 0
    // RetValue  10 added: Name <returnValue> Type I At 0 282 Range 0 281 Init 0 fixed
    // LocalVar   6 added: Name abyte0 Type [B At 4 200 Range 4 203 Init 4
    // LocalVar   7 added: Name i Type I At 10 266 Range 10 275 Init 10
    // LocalVar   8 added: Name j Type I At 16 170 Range 16 185 Init 16
    // LocalVar   2 added: Name byte0 Type B At 36 204 Range 36 239 Init 36
    // LocalVar   3 added: Name k Type I At 42 2 Range 42 43 Init 42
    // LocalVar   9 added: Name byte1 Type B At 121 160 Range 121 280 Init 121
    // LocalVar   4 added: Name byte2 Type B At 144 26 Range 144 169 Init 144
    // LocalVar   9 chged: Name c Oname byte1 Type C At 175 106 Range 121 280 Init 121
    // LocalVar   4 added: Name byte1 Type B At 200 48 Range 200 247 Init 200
    // LocalVar   5 added: Name byte3 Type B At 210 47 Range 210 256 Init 210
    int decode(CharacterWalker characterwalker)
        throws SQLException
    {
        byte abyte0[] = characterwalker.bytes;
        int j = characterwalker.next;
        int k = characterwalker.end;
        if(j >= k)
        {
            CharacterSet.failUTFConversion();
        }
        byte byte0 = abyte0[j++];
        int i = byte0 & 0xf0;
        char c;
        switch(i / 16)
        {
        case 0: // '\0'
        case 1: // '\001'
        case 2: // '\002'
        case 3: // '\003'
        case 4: // '\004'
        case 5: // '\005'
        case 6: // '\006'
        case 7: // '\007'
            c = byte0;
            break;

        case 12: // '\f'
        case 13: // '\r'
            if(j >= k)
            {
                CharacterSet.failUTFConversion();
            }
            byte byte1 = abyte0[j++];
            if((byte1 & 0xc0) != 128)
            {
                CharacterSet.failUTFConversion();
            }
            c = (char)((byte0 & 0x1f) << 6 | byte1 & 0x3f);
            break;

        case 14: // '\016'
            if(j + 1 >= k)
            {
                CharacterSet.failUTFConversion();
            }
            byte byte2 = abyte0[j++];
            byte byte3 = abyte0[j++];
            if((byte2 & 0xc0) != 128 || (byte3 & 0xc0) != 128)
            {
                CharacterSet.failUTFConversion();
            }
            c = (char)((byte0 & 0xf) << 12 | (byte2 & 0x3f) << 6 | byte3 & 0x3f);
            break;

        case 8: // '\b'
        case 9: // '\t'
        case 10: // '\n'
        case 11: // '\013'
        default:
            CharacterSet.failUTFConversion();
            c = '\0';
            break;
        }
        characterwalker.next = j;
        return c;
    }

    // Decompiling method: encode  Signature: (Loracle/sql/CharacterBuffer;I)V
    // Max stack: 5, #locals: 5, #params: 3
    // Code length: 54 bytes, Code offset: 1737
    // Line Number Table found: 8 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 54 Range 0 53 Init 0 fixed
    // Parameter  1 added: Name characterbuffer Type Loracle/sql/CharacterBuffer; At 0 54 Range 0 53 Init 0
    // Parameter  2 added: Name i Type I At 0 54 Range 0 53 Init 0
    // RetValue   5 added: Name <returnValue> Type V At 0 54 Range 0 53 Init 0 fixed
    // LocalVar   3 added: Name ac Type [C At 25 2 Range 25 26 Init 25
    // LocalVar   4 added: Name j Type I At 40 9 Range 40 48 Init 40
    void encode(CharacterBuffer characterbuffer, int i)
        throws SQLException
    {
        if(i > 65535)
        {
            CharacterSet.failUTFConversion();
        } else
        {
            CharacterSet.need(characterbuffer, 3);
            char ac[] = {
                (char)i
            };
            int j = CharacterSet.javaCharsToUTF(ac, 0, 1, characterbuffer.bytes, characterbuffer.next);
            characterbuffer.next += j;
        }
        return;
    }

    // Decompiling method: isConvertibleFrom  Signature: (Loracle/sql/CharacterSet;)Z
    // Max stack: 2, #locals: 3, #params: 2
    // Code length: 18 bytes, Code offset: 1867
    // Line Number Table found: 2 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 18 Range 0 17 Init 0 fixed
    // Parameter  1 added: Name characterset Type Loracle/sql/CharacterSet; At 0 18 Range 0 17 Init 0
    // RetValue   3 added: Name <returnValue> Type Z At 0 18 Range 0 17 Init 0 fixed
    // LocalVar   2 added: Name flag Type Z At 15 2 Range 15 16 Init 15
    public boolean isConvertibleFrom(CharacterSet characterset)
    {
        boolean flag = characterset.rep <= 1024;
        return flag;
    }

    // Decompiling method: isLossyFrom  Signature: (Loracle/sql/CharacterSet;)Z
    // Max stack: 2, #locals: 2, #params: 2
    // Code length: 7 bytes, Code offset: 1927
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 7 Range 0 6 Init 0 fixed
    // Parameter  1 added: Name characterset Type Loracle/sql/CharacterSet; At 0 7 Range 0 6 Init 0
    // RetValue   2 added: Name <returnValue> Type Z At 0 7 Range 0 6 Init 0 fixed
    public boolean isLossyFrom(CharacterSet characterset)
    {
        return characterset.isUnicode() ^ true;
    }

    // Decompiling method: isUnicode  Signature: ()Z
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 2 bytes, Code offset: 1972
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 2 Range 0 1 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type Z At 0 2 Range 0 1 Init 0 fixed
    public boolean isUnicode()
    {
        return true;
    }

    // Decompiling method: toString  Signature: ([BII)Ljava/lang/String;
    // Max stack: 4, #locals: 4, #params: 4
    // Code length: 8 bytes, Code offset: 2012
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 8 Range 0 7 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 8 Range 0 7 Init 0
    // Parameter  2 added: Name i Type I At 0 8 Range 0 7 Init 0
    // Parameter  3 added: Name j Type I At 0 8 Range 0 7 Init 0
    // RetValue   4 added: Name <returnValue> Type Ljava/lang/String; At 0 8 Range 0 7 Init 0 fixed
    public String toString(byte abyte0[], int i, int j)
        throws SQLException
    {
        return toStringWithReplacement(abyte0, i, j);
    }

    // Decompiling method: toStringWithReplacement  Signature: ([BII)Ljava/lang/String;
    // Max stack: 4, #locals: 5, #params: 4
    // Code length: 42 bytes, Code offset: 2068
    // Exception table: 1 entries
    //           start  0 end 8 handler 11 type SQLException
    // Line Number Table found: 6 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetUTF; At 0 42 Range 0 41 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 42 Range 0 41 Init 0
    // Parameter  2 added: Name i Type I At 0 42 Range 0 41 Init 0
    // Parameter  3 added: Name j Type I At 0 42 Range 0 41 Init 0
    // RetValue   5 added: Name <returnValue> Type Ljava/lang/String; At 0 42 Range 0 41 Init 0 fixed
    // LocalVar   4 added: Name ac Type [C At 6 32 Range 6 37 Init 6
    public String toStringWithReplacement(byte abyte0[], int i, int j)
    {
        char ac[];
        try
        {
            ac = CharacterSet.UTFToJavaChar(abyte0, i, j);
        }
        catch(SQLException _ex)
        {
            ac = (new char[] {
                '?', '?', '?'
            });
        }
        return new String(ac);
    }
}
