
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_java_beans_decoder_DecoderContext__
#define __gnu_java_beans_decoder_DecoderContext__

#pragma interface

#include <gnu/java/beans/decoder/AbstractContext.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace beans
      {
        namespace decoder
        {
            class Context;
            class DecoderContext;
        }
      }
    }
  }
  namespace java
  {
    namespace beans
    {
        class XMLDecoder;
    }
  }
}

class gnu::java::beans::decoder::DecoderContext : public ::gnu::java::beans::decoder::AbstractContext
{

public:
  DecoderContext(::java::beans::XMLDecoder *);
  virtual void addParameterObject(::java::lang::Object *);
  virtual void notifyStatement(::gnu::java::beans::decoder::Context *);
  virtual ::java::lang::Object * endContext(::gnu::java::beans::decoder::Context *);
  virtual jboolean subContextFailed();
  virtual void set(jint, ::java::lang::Object *);
  virtual ::java::lang::Object * get(jint);
  virtual ::java::lang::Object * getResult();
  virtual ::java::util::Iterator * iterator();
private:
  ::java::beans::XMLDecoder * __attribute__((aligned(__alignof__( ::gnu::java::beans::decoder::AbstractContext)))) decoder;
  ::java::util::ArrayList * objects;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_beans_decoder_DecoderContext__
