/* DO NOT EDIT THIS FILE - it is machine generated (JCGO_116) */

#ifdef JCGO_SEPARATED
#define JCGO_116
#include "jcgortl.h"
#include "Main.h"
#endif

#ifdef JCGO_116

#ifdef CHKALL_gnu_java_nio_charset_UTF_18
#include "jcgobchk.h"
#endif

JCGO_NOSEP_INLINE jboolean CFASTCALL
gnu_java_nio_charset_UTF_8_Decoder__isContinuation__B( jbyte b )
{
 {
  return (jboolean)((b & (jint)192) == (jint)128);
 }
}

JCGO_NOSEP_INLINE gnu_java_nio_charset_UTF_8_Decoder CFASTCALL
gnu_java_nio_charset_UTF_8_Decoder__this__L7qsf6( gnu_java_nio_charset_UTF_8_Decoder
 This, java_nio_charset_Charset cs )
{
 {
  (java_nio_charset_CharsetDecoder__this__L7qsf6FF((java_nio_charset_CharsetDecoder)This,
   cs, (jfloat)1.0, (jfloat)1.0));
 }
 return This;
}

JCGO_NOSEP_FRWINL gnu_java_nio_charset_UTF_8_Decoder CFASTCALL
gnu_java_nio_charset_UTF_8_Decoder__new__L7qsf6( java_nio_charset_Charset
 cs )
{
 return gnu_java_nio_charset_UTF_8_Decoder__this__L7qsf6(
  (gnu_java_nio_charset_UTF_8_Decoder)jcgo_newObject((jvtable)&gnu_java_nio_charset_UTF_8_Decoder_methods),
  cs);
}

JCGO_NOSEP_STATIC java_nio_charset_CoderResult CFASTCALL
gnu_java_nio_charset_UTF_8_Decoder__decodeLoop__L9oaiaL3367b( gnu_java_nio_charset_UTF_8_Decoder
 This, java_nio_ByteBuffer in, java_nio_CharBuffer out )
{
 {
  JCGO_TRY_VOLATILE jint inPos;
  inPos= (JCGO_CALL_FINALF(in) java_nio_Buffer__position__(
   (java_nio_Buffer)in));
  {
   JCGO_TRY_BLOCK
   {
    while ((java_nio_Buffer__hasRemaining__(
     (java_nio_Buffer)in)))
    {
     jint highNibble;
     jchar c;
     jbyte b1;
     b1= (java_nio_ByteBufferImpl__get__(
      (java_nio_ByteBufferImpl)in));
     highNibble= JCGO_SHR_F(((jint)((unsigned char)b1)), (jint)4) &
      (jint)15;
     switch (highNibble)
     {
      jint n;
      jchar c1;
      jchar c2;
      jbyte b2;
      jbyte b3;
      jbyte b4;
       case 0:
       case (jint)1:
       case (jint)2:
       case (jint)3:
       case (jint)4:
       case (jint)5:
       case (jint)6:
       case (jint)7:
      if ((JCGO_CALL_FINALF(out) java_nio_Buffer__remaining__(
       (java_nio_Buffer)out)) < (jint)1)
      {
       {
        java_nio_charset_CoderResult jcgo_retval= JCGO_CLINIT_VARACC(java_nio_charset_CoderResult__class,
         java_nio_charset_CoderResult__OVERFLOW);
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      (java_nio_CharBufferImpl__put__C(
       (java_nio_CharBufferImpl)out, (jchar)b1));
      inPos++;
      break;
       case (jint)12:
       case (jint)13:;
      if ((java_nio_Buffer__remaining__(
       (java_nio_Buffer)in)) < (jint)1)
      {
       {
        java_nio_charset_CoderResult jcgo_retval= JCGO_CLINIT_VARACC(java_nio_charset_CoderResult__class,
         java_nio_charset_CoderResult__UNDERFLOW);
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      if ((JCGO_CALL_FINALF(out) java_nio_Buffer__remaining__(
       (java_nio_Buffer)out)) < (jint)1)
      {
       {
        java_nio_charset_CoderResult jcgo_retval= JCGO_CLINIT_VARACC(java_nio_charset_CoderResult__class,
         java_nio_charset_CoderResult__OVERFLOW);
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      if (!(gnu_java_nio_charset_UTF_8_Decoder__isContinuation__B(
       b2= (java_nio_ByteBufferImpl__get__(
       (java_nio_ByteBufferImpl)in)))))
      {
       {
        java_nio_charset_CoderResult jcgo_retval= (java_nio_charset_CoderResult__malformedForLength__I(
         (jint)1));
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      c= (jchar)(JCGO_SHL_F((b1 & (jint)31), (jint)6) | (b2 & (jint)63));
      if ((jint)c <= (jint)127)
      {
       {
        java_nio_charset_CoderResult jcgo_retval= (java_nio_charset_CoderResult__malformedForLength__I(
         (jint)2));
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      (java_nio_CharBufferImpl__put__C(
       (java_nio_CharBufferImpl)out, c));
      inPos+= (jint)2;
      break;
       case (jint)14:;
      if ((java_nio_Buffer__remaining__(
       (java_nio_Buffer)in)) < (jint)2)
      {
       {
        java_nio_charset_CoderResult jcgo_retval= JCGO_CLINIT_VARACC(java_nio_charset_CoderResult__class,
         java_nio_charset_CoderResult__UNDERFLOW);
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      if ((JCGO_CALL_FINALF(out) java_nio_Buffer__remaining__(
       (java_nio_Buffer)out)) < (jint)1)
      {
       {
        java_nio_charset_CoderResult jcgo_retval= JCGO_CLINIT_VARACC(java_nio_charset_CoderResult__class,
         java_nio_charset_CoderResult__OVERFLOW);
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      if (!(gnu_java_nio_charset_UTF_8_Decoder__isContinuation__B(
       b2= (java_nio_ByteBufferImpl__get__(
       (java_nio_ByteBufferImpl)in)))))
      {
       {
        java_nio_charset_CoderResult jcgo_retval= (java_nio_charset_CoderResult__malformedForLength__I(
         (jint)1));
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      if (!(gnu_java_nio_charset_UTF_8_Decoder__isContinuation__B(
       b3= (java_nio_ByteBufferImpl__get__(
       (java_nio_ByteBufferImpl)in)))))
      {
       {
        java_nio_charset_CoderResult jcgo_retval= (java_nio_charset_CoderResult__malformedForLength__I(
         (jint)1));
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      c= (jchar)(JCGO_SHL_F((b1 & (jint)15), (jint)12) | JCGO_SHL_F((b2 &
       (jint)63), (jint)6) | (b3 & (jint)63));
      if ((jint)c <= (jint)2047)
      {
       {
        java_nio_charset_CoderResult jcgo_retval= (java_nio_charset_CoderResult__malformedForLength__I(
         (jint)3));
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      (java_nio_CharBufferImpl__put__C(
       (java_nio_CharBufferImpl)out, c));
      inPos+= (jint)3;
      break;
       case (jint)15:;
      if ((java_nio_Buffer__remaining__(
       (java_nio_Buffer)in)) < (jint)3)
      {
       {
        java_nio_charset_CoderResult jcgo_retval= JCGO_CLINIT_VARACC(java_nio_charset_CoderResult__class,
         java_nio_charset_CoderResult__UNDERFLOW);
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      if ((b1 & (jint)15) > (jint)4)
      {
       {
        java_nio_charset_CoderResult jcgo_retval= (java_nio_charset_CoderResult__malformedForLength__I(
         (jint)4));
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      if ((JCGO_CALL_FINALF(out) java_nio_Buffer__remaining__(
       (java_nio_Buffer)out)) < (jint)2)
      {
       {
        java_nio_charset_CoderResult jcgo_retval= JCGO_CLINIT_VARACC(java_nio_charset_CoderResult__class,
         java_nio_charset_CoderResult__OVERFLOW);
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      if (!(gnu_java_nio_charset_UTF_8_Decoder__isContinuation__B(
       b2= (java_nio_ByteBufferImpl__get__(
       (java_nio_ByteBufferImpl)in)))))
      {
       {
        java_nio_charset_CoderResult jcgo_retval= (java_nio_charset_CoderResult__malformedForLength__I(
         (jint)3));
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      if (!(gnu_java_nio_charset_UTF_8_Decoder__isContinuation__B(
       b3= (java_nio_ByteBufferImpl__get__(
       (java_nio_ByteBufferImpl)in)))))
      {
       {
        java_nio_charset_CoderResult jcgo_retval= (java_nio_charset_CoderResult__malformedForLength__I(
         (jint)2));
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      if (!(gnu_java_nio_charset_UTF_8_Decoder__isContinuation__B(
       b4= (java_nio_ByteBufferImpl__get__(
       (java_nio_ByteBufferImpl)in)))))
      {
       {
        java_nio_charset_CoderResult jcgo_retval= (java_nio_charset_CoderResult__malformedForLength__I(
         (jint)1));
#ifndef JCGO_SEHTRY
        jcgo_tryLeave();
        {
         (java_nio_Buffer__position__I(
          (java_nio_Buffer)in, inPos));
        }
#endif
        return jcgo_retval;
       }
      }
      n= (JCGO_SHL_F((b1 & (jint)3), (jint)18) | JCGO_SHL_F((b2 & (jint)63),
       (jint)12) | JCGO_SHL_F((b3 & (jint)63), (jint)6) | (b4 & (jint)63)) -
       (jint)65536L;
      c1= (jchar)(JCGO_SHR_F((n & (jint)1047552L), (jint)10) | (jint)55296L);
      c2= (jchar)((n & (jint)1023) | (jint)56320L);
      (java_nio_CharBufferImpl__put__C(
       (java_nio_CharBufferImpl)out, c1));
      (java_nio_CharBufferImpl__put__C(
       (java_nio_CharBufferImpl)out, c2));
      inPos+= (jint)4;
      break;
       default:
      {
       java_nio_charset_CoderResult jcgo_retval= (java_nio_charset_CoderResult__malformedForLength__I(
        (jint)1));
#ifndef JCGO_SEHTRY
       jcgo_tryLeave();
       {
        (java_nio_Buffer__position__I(
         (java_nio_Buffer)in, inPos));
       }
#endif
       return jcgo_retval;
      }
      ;
     }
    }
    {
     java_nio_charset_CoderResult jcgo_retval= JCGO_CLINIT_VARACC(java_nio_charset_CoderResult__class,
      java_nio_charset_CoderResult__UNDERFLOW);
#ifndef JCGO_SEHTRY
     jcgo_tryLeave();
     {
      (java_nio_Buffer__position__I(
       (java_nio_Buffer)in, inPos));
     }
#endif
     return jcgo_retval;
    }
   }
   JCGO_TRY_LEAVE
   {
    (java_nio_Buffer__position__I(
     (java_nio_Buffer)in, inPos));
   }
   JCGO_TRY_FINALLYEND
  }
 }
 return jnull;
}

JCGO_NOSEP_DATA CONST struct gnu_java_nio_charset_UTF_8_Decoder_methods_s
 gnu_java_nio_charset_UTF_8_Decoder_methods=
{
 JCGO_CLASSREF_OF(gnu_java_nio_charset_UTF_8_Decoder__class),
 JCGO_GCJDESCR_INIT(gnu_java_nio_charset_UTF_8_Decoder_s, unmappableCharacterAction)
 OBJT_gnu_java_nio_charset_UTF_8_Decoder,
 (JCGO_OBJSIZE_T)sizeof(struct gnu_java_nio_charset_UTF_8_Decoder_s),
 NULL,
 JCGO_CLINIT_INIT(0)
 0,
 java_lang_Object__equals__Lo,
 java_lang_Object__hashCode__,
 java_lang_Object__toString__,
 java_lang_Object__finalize__,
 gnu_java_nio_charset_UTF_8_Decoder__decodeLoop__L9oaiaL3367b,
 (void (CFASTCALL*)(java_nio_charset_CharsetDecoder))java_lang_Object__finalize__
};

JCGO_NOSEP_DATA JCGO_NOTHR_CONST struct gnu_java_nio_charset_UTF_8_Decoder_class_s
 gnu_java_nio_charset_UTF_8_Decoder__class JCGO_THRD_ATTRNONGC=
{
 {
  &java_lang_Class_methods,
  JCGO_MON_INIT
  JCGO_OBJREF_OF(*(java_lang_Object)&gnu_java_nio_charset_UTF_8_Decoder_methods),
  JCGO_STRREF_OF(jcgo_string1_Dcdr00),
  JCGO_CLASSREF_OF(java_nio_charset_CharsetDecoder__class),
  ((jObjectArr)JCGO_OBJREF_OF(jcgo_array3_Object)),
  0x1a
 }
};

JCGO_NOSEP_DATA JCGO_NOTHR_CONST struct java_lang_String_s jcgo_string1_Dcdr00
 JCGO_THRD_ATTRNONGC=
{
 &java_lang_String_methods,
 JCGO_MON_INIT
 (java_lang_Object)JCGO_OBJREF_OF(jcgo_array9_Utf8),
 0, 34, (jint)0xfe196638L
};

#ifdef CHKALL_gnu_java_nio_charset_UTF_18
#include "jcgochke.h"
#endif

#endif
