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

package oracle.sql;

import java.io.UnsupportedEncodingException;
import java.sql.SQLException;

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

// flag ACC_SUPER is set
class CharacterSetByte extends CharacterSet
    implements CharacterRepConstants
{
    // Constants:          112
    // Interfaces:         1
    // Fields:             0
    // Methods:            12
    // Class Attributes:   1


    // Decompiling method: <init>  Signature: (I)V
    // Max stack: 2, #locals: 2, #params: 2
    // Code length: 11 bytes, Code offset: 1405
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetByte; 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
    CharacterSetByte(int i)
    {
        super(i);
        rep = 1;
        return;
    }

    // Decompiling method: charsToBytes  Signature: ([CB)[B
    // Max stack: 4, #locals: 4, #params: 2
    // Code length: 56 bytes, Code offset: 1462
    // Line Number Table found: 10 entries
    // Parameter  0 added: Name ac Type [C At 0 56 Range 0 55 Init 0
    // Parameter  1 added: Name byte0 Type B At 0 56 Range 0 55 Init 0
    // RetValue   4 added: Name <returnValue> Type [B At 0 56 Range 0 55 Init 0 fixed
    // LocalVar   2 added: Name abyte0 Type [B At 4 51 Range 4 54 Init 4
    // LocalVar   3 added: Name flag Type Z At 6 43 Range 6 48 Init 6
    // LocalVar   3 chged: Name i Oname flag Type I At 48 1 Range 6 48 Init 6
    static byte[] charsToBytes(char ac[], byte byte0)
        throws SQLException
    {
        byte abyte0[] = new byte[ac.length];
        for(int i = 0; i < ac.length; i++)
        {
            if(ac[i] > '\377')
            {
                abyte0[i] = byte0;
                if(byte0 == 0)
                {
                    CharacterSet.failCharacterConversion(CharacterSet.make(31));
                }
            } else
            {
                abyte0[i] = (byte)ac[i];
            }
        }

        return abyte0;
    }

    // Decompiling method: convert  Signature: (Ljava/lang/String;)[B
    // Max stack: 5, #locals: 4, #params: 2
    // Code length: 26 bytes, Code offset: 1602
    // Line Number Table found: 4 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetByte; At 0 26 Range 0 25 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 26 Range 0 25 Init 0
    // RetValue   4 added: Name <returnValue> Type [B At 0 26 Range 0 25 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 4 11 Range 4 14 Init 4
    // LocalVar   3 added: Name ac Type [C At 11 10 Range 11 20 Init 11
    public byte[] convert(String s)
        throws SQLException
    {
        int i = s.length();
        char ac[] = new char[s.length()];
        s.getChars(0, i, ac, 0);
        return charsToBytes(ac, (byte)0);
    }

    // Decompiling method: convert  Signature: (Loracle/sql/CharacterSet;[BII)[B
    // Max stack: 4, #locals: 8, #params: 5
    // Code length: 76 bytes, Code offset: 1688
    // Line Number Table found: 11 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetByte; At 0 76 Range 0 75 Init 0 fixed
    // Parameter  1 added: Name characterset Type Loracle/sql/CharacterSet; At 0 76 Range 0 75 Init 0
    // Parameter  2 added: Name abyte0 Type [B At 0 76 Range 0 75 Init 0
    // Parameter  3 added: Name i Type I At 0 76 Range 0 75 Init 0
    // Parameter  4 added: Name j Type I At 0 76 Range 0 75 Init 0
    // RetValue   8 added: Name <returnValue> Type [B At 0 76 Range 0 75 Init 0 fixed
    // LocalVar   5 added: Name abyte1 Type [B At 15 60 Range 15 74 Init 15
    // LocalVar   6 added: Name ac Type [C At 35 4 Range 35 38 Init 35
    // LocalVar   6 added: Name s Type Ljava/lang/String; At 56 4 Range 56 59 Init 56
    // LocalVar   7 added: Name ac1 Type [C At 63 4 Range 63 66 Init 63
    public byte[] convert(CharacterSet characterset, byte abyte0[], int i, int j)
        throws SQLException
    {
        byte abyte1[];
        if(characterset.rep == 1)
        {
            abyte1 = CharacterSet.useOrCopy(abyte0, i, j);
        } else
        if(characterset.rep == 2)
        {
            char ac[] = CharacterSet.UTFToJavaChar(abyte0, i, j);
            abyte1 = charsToBytes(ac, (byte)0);
        } else
        {
            String s = characterset.toString(abyte0, i, j);
            char ac1[] = s.toCharArray();
            abyte1 = charsToBytes(ac1, (byte)0);
        }
        return abyte1;
    }

    // Decompiling method: convertWithReplacement  Signature: (Ljava/lang/String;)[B
    // Max stack: 5, #locals: 4, #params: 2
    // Code length: 32 bytes, Code offset: 1852
    // Exception table: 1 entries
    //           start  20 end 27 handler 27 type SQLException
    // Line Number Table found: 7 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetByte; At 0 32 Range 0 31 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 32 Range 0 31 Init 0
    // RetValue   4 added: Name <returnValue> Type [B At 0 32 Range 0 31 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 4 11 Range 4 14 Init 4
    // LocalVar   3 added: Name ac Type [C At 11 10 Range 11 20 Init 11
    public byte[] convertWithReplacement(String s)
    {
        int i = s.length();
        char ac[] = new char[s.length()];
        s.getChars(0, i, ac, 0);
        try
        {
            return charsToBytes(ac, (byte)63);
        }
        catch(SQLException _ex)
        {
            return new byte[0];
        }
    }

    // Decompiling method: decode  Signature: (Loracle/sql/CharacterWalker;)I
    // Max stack: 3, #locals: 3, #params: 2
    // Code length: 26 bytes, Code offset: 1954
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetByte; At 0 26 Range 0 25 Init 0 fixed
    // Parameter  1 added: Name characterwalker Type Loracle/sql/CharacterWalker; At 0 26 Range 0 25 Init 0
    // RetValue   3 added: Name <returnValue> Type I At 0 26 Range 0 25 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 13 12 Range 13 24 Init 13
    int decode(CharacterWalker characterwalker)
    {
        int i = characterwalker.bytes[characterwalker.next] & 0xff;
        characterwalker.next++;
        return i;
    }

    // Decompiling method: encode  Signature: (Loracle/sql/CharacterBuffer;I)V
    // Max stack: 3, #locals: 3, #params: 3
    // Code length: 34 bytes, Code offset: 2026
    // Line Number Table found: 5 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetByte; At 0 34 Range 0 33 Init 0 fixed
    // Parameter  1 added: Name characterbuffer Type Loracle/sql/CharacterBuffer; At 0 34 Range 0 33 Init 0
    // Parameter  2 added: Name i Type I At 0 34 Range 0 33 Init 0
    // RetValue   3 added: Name <returnValue> Type V At 0 34 Range 0 33 Init 0 fixed
    void encode(CharacterBuffer characterbuffer, int i)
        throws SQLException
    {
        CharacterSet.need(characterbuffer, 1);
        if(i < 256)
        {
            characterbuffer.bytes[characterbuffer.next] = (byte)i;
            characterbuffer.next++;
        }
        return;
    }

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

    // Decompiling method: isLossyFrom  Signature: (Loracle/sql/CharacterSet;)Z
    // Max stack: 2, #locals: 2, #params: 2
    // Code length: 14 bytes, Code offset: 2178
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetByte; At 0 14 Range 0 13 Init 0 fixed
    // Parameter  1 added: Name characterset Type Loracle/sql/CharacterSet; At 0 14 Range 0 13 Init 0
    // RetValue   2 added: Name <returnValue> Type Z At 0 14 Range 0 13 Init 0 fixed
    public boolean isLossyFrom(CharacterSet characterset)
    {
        return characterset.rep != 1;
    }

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

    // Decompiling method: toString  Signature: ([BIIC)Ljava/lang/String;
    // Max stack: 6, #locals: 5, #params: 5
    // Code length: 24 bytes, Code offset: 2287
    // Exception table: 1 entries
    //           start  0 end 13 handler 13 type UnsupportedEncodingException
    // Line Number Table found: 4 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetByte; At 0 24 Range 0 23 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 24 Range 0 23 Init 0
    // Parameter  2 added: Name i Type I At 0 24 Range 0 23 Init 0
    // Parameter  3 added: Name j Type I At 0 24 Range 0 23 Init 0
    // Parameter  4 added: Name c Type C At 0 24 Range 0 23 Init 0
    // RetValue   5 added: Name <returnValue> Type Ljava/lang/String; At 0 24 Range 0 23 Init 0 fixed
    private String toString(byte abyte0[], int i, int j, char c)
        throws SQLException
    {
        try
        {
            return new String(abyte0, i, j, "ASCII");
        }
        catch(UnsupportedEncodingException _ex)
        {
            throw new SQLException("ascii not supported");
        }
    }

    // Decompiling method: toStringWithReplacement  Signature: ([BII)Ljava/lang/String;
    // Max stack: 5, #locals: 4, #params: 4
    // Code length: 21 bytes, Code offset: 2379
    // Exception table: 1 entries
    //           start  0 end 10 handler 10 type SQLException
    // Line Number Table found: 4 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetByte; At 0 21 Range 0 20 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 21 Range 0 20 Init 0
    // Parameter  2 added: Name i Type I At 0 21 Range 0 20 Init 0
    // Parameter  3 added: Name j Type I At 0 21 Range 0 20 Init 0
    // RetValue   4 added: Name <returnValue> Type Ljava/lang/String; At 0 21 Range 0 20 Init 0 fixed
    public String toStringWithReplacement(byte abyte0[], int i, int j)
    {
        try
        {
            return toString(abyte0, i, j, '?');
        }
        catch(SQLException _ex)
        {
            throw new Error("CharacterSetByte.toString");
        }
    }
}
