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

#ifndef __gnu_java_beans_decoder_GrowableArrayContext__
#define __gnu_java_beans_decoder_GrowableArrayContext__

#pragma interface

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

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

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

#endif // __gnu_java_beans_decoder_GrowableArrayContext__
