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

#ifndef __gnu_java_beans_decoder_ArrayContext__
#define __gnu_java_beans_decoder_ArrayContext__

#pragma interface

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

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

public: // actually package-private
  ArrayContext(::java::lang::String *, ::java::lang::Class *, jint);
public:
  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();
private:
  ::java::lang::Object * __attribute__((aligned(__alignof__( ::gnu::java::beans::decoder::AbstractContext)))) array;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_beans_decoder_ArrayContext__
