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

package oracle.sql;

import java.sql.SQLException;
import oracle.sql.converter.CharacterConverter;
import oracle.sql.converter.CharacterConverterShift;

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

// flag ACC_SUPER is set
class CharacterSetShift extends CharacterSetWithConverter
{
    // Constants:          77
    // Interfaces:         0
    // Fields:             5
    // Methods:            4
    // Class Attributes:   1


    static final String CHAR_CONV_SUPERCLASS_NAME = "oracle.sql.converter.CharacterConverterShift";
    static final short MAX_7BIT = 127;
    static final short MIN_8BIT_SB = 161;
    static final short MAX_8BIT_SB = 223;
    static Class m_charConvSuperclass;

    // Decompiling method: <init>  Signature: (ILoracle/sql/converter/CharacterConverterShift;)V
    // Max stack: 3, #locals: 3, #params: 3
    // Code length: 7 bytes, Code offset: 1275
    // Line Number Table found: 2 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetShift; At 0 7 Range 0 6 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 7 Range 0 6 Init 0
    // Parameter  2 added: Name characterconvertershift Type Loracle/sql/converter/CharacterConverterShift; At 0 7 Range 0 6 Init 0
    // RetValue   3 added: Name <returnValue> Type V At 0 7 Range 0 6 Init 0 fixed
    CharacterSetShift(int i, CharacterConverterShift characterconvertershift)
    {
        super(i, characterconvertershift);
        return;
    }

    // Decompiling method: decode  Signature: (Loracle/sql/CharacterWalker;)I
    // Max stack: 3, #locals: 3, #params: 2
    // Code length: 96 bytes, Code offset: 1324
    // Line Number Table found: 10 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetShift; At 0 96 Range 0 95 Init 0 fixed
    // Parameter  1 added: Name characterwalker Type Loracle/sql/CharacterWalker; At 0 96 Range 0 95 Init 0
    // RetValue   3 added: Name <returnValue> Type I At 0 96 Range 0 95 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 13 82 Range 13 94 Init 13
    int decode(CharacterWalker characterwalker)
        throws SQLException
    {
        int i = characterwalker.bytes[characterwalker.next] & 0xff;
        characterwalker.next++;
        if(i > 223 || i > 127 && i < 161)
        {
            if(characterwalker.bytes.length > characterwalker.next)
            {
                i = i << 8 | characterwalker.bytes[characterwalker.next];
                characterwalker.next++;
            } else
            {
                throw new SQLException("destination too small");
            }
        }
        return i;
    }

    // Decompiling method: encode  Signature: (Loracle/sql/CharacterBuffer;I)V
    // Max stack: 5, #locals: 9, #params: 3
    // Code length: 270 bytes, Code offset: 1504
    // Line Number Table found: 44 entries
    // Parameter  0 added: Name this Type Loracle/sql/CharacterSetShift; At 0 270 Range 0 269 Init 0 fixed
    // Parameter  1 added: Name characterbuffer Type Loracle/sql/CharacterBuffer; At 0 270 Range 0 269 Init 0
    // Parameter  2 added: Name i Type I At 0 270 Range 0 269 Init 0
    // RetValue   9 added: Name <returnValue> Type V At 0 270 Range 0 269 Init 0 fixed
    // LocalVar   3 added: Name j Type I At 4 58 Range 4 61 Init 4
    // LocalVar   4 added: Name flag Type Z At 6 141 Range 6 146 Init 6
    // LocalVar   5 added: Name flag1 Type Z At 66 200 Range 66 265 Init 66
    // LocalVar   6 added: Name flag2 Type Z At 69 94 Range 69 162 Init 69
    // LocalVar   5 chged: Name k Oname flag1 Type I At 90 2 Range 66 265 Init 66
    // LocalVar   6 chged: Name l Oname flag2 Type I At 96 2 Range 69 162 Init 69
    // LocalVar   7 added: Name flag1 Type Z At 113 55 Range 113 167 Init 113
    // LocalVar   8 added: Name flag2 Type Z At 116 83 Range 116 198 Init 116
    // LocalVar   6 chged: Name word0 Oname l Type S At 137 26 Range 69 162 Init 69
    // LocalVar   5 chged: Name word1 Oname k Type S At 74 192 Range 66 265 Init 66
    void encode(CharacterBuffer characterbuffer, int i)
        throws SQLException
    {
        int j = characterbuffer.next;
        boolean flag = true;
        while(j <= 0) 
        {
            CharacterConverterShift _tmp = (CharacterConverterShift)m_converter;
            if(characterbuffer.bytes[j] == 15)
            {
                flag = true;
                break;
            }
            CharacterConverterShift _tmp1 = (CharacterConverterShift)m_converter;
            if(characterbuffer.bytes[j] == 14)
            {
                flag = false;
                break;
            }
        }
        short word0 = 0;
        short word1;
        for(word1 = 1; i >> word0 != 0; word1++)
        {
            word0 += 8;
        }

        if(word1 > 2)
        {
            throw new SQLException("Character invalid, too many bytes");
        }
        boolean flag1 = false;
        boolean flag2 = false;
        if(word1 == 1 && !flag)
        {
            flag1 = true;
            word1++;
        }
        if(word1 == 2 && flag)
        {
            flag2 = true;
            word1++;
        }
        CharacterSet.need(characterbuffer, word1);
        if(flag1)
        {
            CharacterConverterShift _tmp2 = (CharacterConverterShift)m_converter;
            characterbuffer.bytes[characterbuffer.next++] = 15;
        }
        if(flag2)
        {
            CharacterConverterShift _tmp3 = (CharacterConverterShift)m_converter;
            characterbuffer.bytes[characterbuffer.next++] = 14;
        }
        for(; word0 >= 0; word0 -= 8)
        {
            characterbuffer.bytes[characterbuffer.next++] = (byte)(i >> word0 & 0xff);
        }

        return;
    }

    // Decompiling method: getInstance  Signature: (ILoracle/sql/converter/CharacterConverter;)Loracle/sql/CharacterSetShift;
    // Max stack: 4, #locals: 2, #params: 2
    // Code length: 24 bytes, Code offset: 1994
    // Line Number Table found: 6 entries
    // Parameter  0 added: Name i Type I At 0 24 Range 0 23 Init 0
    // Parameter  1 added: Name characterconverter Type Loracle/sql/converter/CharacterConverter; At 0 24 Range 0 23 Init 0
    // RetValue   2 added: Name <returnValue> Type Loracle/sql/CharacterSetShift; At 0 24 Range 0 23 Init 0 fixed
    static CharacterSetShift getInstance(int i, CharacterConverter characterconverter)
    {
        if(characterconverter.getGroupId() == 7)
        {
            return new CharacterSetShift(i, (CharacterConverterShift)characterconverter);
        } else
        {
            return null;
        }
    }
}
